C语言编程之指针

C语言编程之指针

ID:43344113

大小:225.00 KB

页数:26页

时间:2019-10-08

C语言编程之指针_第1页
C语言编程之指针_第2页
C语言编程之指针_第3页
C语言编程之指针_第4页
C语言编程之指针_第5页
资源描述:

《C语言编程之指针》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C语言编程之指针姚延栋yydzero@gmail.com2009-04-01指针与C语言指针是C语言的精髓,精通指针是精通C的前提.指针是C语言最大的陷阱,误用指针后患无穷.Agenda指针的概念指针的操作符指针的运算指针和数组指针和函数指针和结构体指针和动态内存分配变量的概念变量是一个标识符,对应一个内存地址块.变量有两个值(默认说变量的值时指的是rvalue):lvalue:变量对应的内存地址的值:x=y;rvalue:变量对应的内存地址所存储的值:z=x;变量的类型:决定了占用内存块的大小.sizeof()变量是给程序员看的,而内存地址是给程序/机器看的x0xFC内存符号表25

2、60xFCstaticintx=256;指针指针是一个变量,是一个特殊的变量,特殊之处在于:指针变量的类型:变量类型决定了占用内存块的大小,而所有指针变量占有内存块大小相同lvalue:指针变量的左值和普通变量的左值一样,都是该变量所对应的内存的首地址rvalue:指针变量的右值不是一个普通的值,被编译器解释为另一个变量的地址.关键在于编译器对之特殊解释指针实际上提供了一种间接内存访问的方式,程序员通过指针操作符来访问指针所指向的变量的值指针的四个方面类型:指针变量的类型指针变量所指向的类型值指针变量的左值(lvalue)指针变量的右值(rvalue)指针的类型(指针是个什么类型的指

3、针)类型决定占用内存块的大小:所有指针占用内存块大小相同,32位程序是32位,64位程序是64位.从语法的角度,把声明中的指针名字去掉,剩下的就是指针的类型.int*ptr;//指针的类型是int*int**ptr;//指针的类型是int**int(*ptr)[3];//指针的类型是int(*)[3]指针所指向的类型当使用指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将如何看待那片内存区里的内容,从语法上,只要把声明语句中指针名字和名字左边的指针声明符号*去掉,剩下的就是指针所指向的类型.int*ptr;//指针所指向的类型是intint**ptr;//指针所指向的类型

4、是int*int(*ptr)[3];//指针所指向的类型是int()[3]在指针的算数运算中,指针所指向的类型有很大的作用.指针的左值(lvalue)指针的左值和普通变量一样,即本身所占用的内存区的起始地址.指针的右值(rvalue)指针的右值(rvalue)是指针本身存储的数值,这个值被编译器当作一个另一个变量的地址,而不是一个一般的数值.指针所指向的内存区起始地址:指针的右值(rvalue)大小:sizeof(指针所指向的类型)指针的值是0xffff指针指向了以0xffff为首地址的一个内存块综合指针的四个方面i0xA0A0A0A0p0xB0B0B0B0符号表…32位内存地址空

5、间0x000000000xA0A0A0A00xB0B0B0B02560xA0A0A0A00xFFFFFFFFstaticinti=256;staticint*p=&i;指针p的类型:int*指针p所指向类型:int指针p的lvalue:0xB0B0B0B0指针p的rvalue:0xA0A0A0A0指针指向的内存块的值:*p(*为解引用操作符)Agenda指针的概念指针的操作符指针的运算指针和数组指针和函数指针和结构体指针和动态内存分配操作符:程序员使用指针的唯一方式…32位内存地址空间0x000000000xA0A0A0A00xB0B0B0B02560xA0A0A0A00xB0B0B

6、0B0&:取地址操作符(在等号右边使用左值的方式)*:解引用操作符inti=256;int*p=&i;int**ptr=&p;Printf(“%x%x”,*p,*ptr);注意:起始地址vs.类型大小piptr0xB5B5B5B5Agenda指针的概念指针的操作符指针的运算指针和数组指针和函数指针和结构体指针和动态内存分配指针的算数运算指针的值是内存地址,因而是一个无符号整数,这个整数可以进行算数运算,但是和通常的数值加减运算意义不一样常见形式(pointer)=(pointer)(pointer)=0orNULL(pointer)=(pointer)+(int)(pointer

7、)++or(pointer)--……(int)=(pointer)–(pointer)指针运算的基本单位为指针所指向类型的大小char*p=“helloworld!”;p++;inta[]={20,21,22};int*p=a;p++;Helloworld!202122稍微复杂的例子#includeintmain(intargc,char**argv){chara[20]="helloworld!";char(*p)[20]=&a;/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。