c指针用法总结

c指针用法总结

ID:21541054

大小:48.50 KB

页数:10页

时间:2018-10-22

c指针用法总结_第1页
c指针用法总结_第2页
c指针用法总结_第3页
c指针用法总结_第4页
c指针用法总结_第5页
资源描述:

《c指针用法总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C指针的用法总结char*p,**p,***p;charp[],p[][],p[][][];char*p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][];void(*pFun)(inti);大神们看到这些东西脑袋里一定像蓝天白云一样清晰明了。。。(1)关于指针与数组的存储a、指针和数组在内存中的存储形式数组p[N]创建时,对应着内存中一个数组空间的分配,其地址和容量在数组生命周期内一般不可改变。数组名p本身是一个常量,即分配数组空间的地址值,这个值在编译时会替换成一个常数,在运行时没有任何内存空间来存储这个值,它和数组长度一起存在

2、于代码中(应该是符号表中),在链接时已经制定好了;而指针*p创建时,对应内存中这个指针变量的空间分配,至于这个空间内填什么值即这个指针变量的值是多少,要看它在程序中被如何初始化,这也决定了指针指向哪一块内存地址。b、指针和数组的赋值与初始化根据上文,一般情况下,数组的地址不能修改,内容可以修改;而指针的内容可以修改,指针指向的内容也可以修改,但这之前要为指针初始化。如:intp[5];p=p+1;是不允许的而p[0]=1;是可以的;//int*p;p=p+1;是允许的p[0]=1;是不允许的,因为指针没有初始化;//inti;int*p=&i;p[0]=1;是允许的;对于字符指针

3、还有比较特殊的情况。如:char*p="abc";p[0]='d';是不允许的为什么初始化了的字符指针不能改变其指向的内容呢?这是因为p指向的是“常量”字符串,字符串"abc"实际是存储在程序的静态存储区的,因此内容不能改变。这里常量字符串的地址确定在先,将指针指向其在后。而charp[]="abc";p[0]='d';是允许的这是因为,这个初始化实际上是把常量直接赋值给数组,即写到为数组分配的内存空间。这里数组内存分配在先,赋值在后。(2)关于一些表达式的含义char*p,**p,***p;charp[],p[][],p[][][];char*p[],*p[][],**p[],

4、**p[][],*(*p)[],(**p)[],(**p)[][];能清晰地知道以上表达式的含义吗?(知道的去死!)第一组:char*p,**p,***p;分别为char指针;char*指针,即指向char*类型数据地址的指针;char**指针,即指向char**类型数据的指针;他们都是占4字节空间的指针。如:charc='a';char*p=&c;char**p1=&p;char***p2=&p1;cout<<***p2<的数组。可以如下的方式

5、进行初始化:charpp[3]="ab";charpp1[3][3]={"ab"};charpp2[3][3][3]={{"ab"}};现在我们尝试使用第二组三个数组名对应为第一组三个指针赋值,直接赋值的结果如下:p=pp;//正确p1=pp1;//错误p2=pp2;//错误为什么p1和p2的赋值会出错呢?原因是数组名为给指针赋值的规则不是递归的,即数组的数组可以为数组的指针赋值,而不可以为指针的指针赋值。这里先了解到这个抽象的规则,下面讲完第三组表达式,等我们知道数组的指针和指针的数组如何书写后再对这一问题举例说明。第三组:char*p[],*p[][],**p[],**p[]

6、[],*(*p)[],(**p)[],(**p)[][];这一类表达式的解析方法如下:首先把整个表达式分为三部分,数据类型和星号部分+p或括号内内容部分+中括号部分如:char*(*p)[]分为char*,(*p)和[]“char*”表示最内层存储的数据类型“(*p)”表示最外层指针“[]”表示中间层数组(维数=中括号数目),因此上式表示一个一维数组的指针p,数组中的元素的数据类型是指针char*。同理,char(**p)[][]表示,一个二维数组的指针的指针,数组元素的数据类型是char。这里如果表达式中间没有括号(如**p[]),则实际上是一个数组,如果最右没有中括号(如**

7、p),则实际上是一个指针。下面通过赋值表达式来理解这些表达式的含义:charc='a';char*pc=&c;char*p[3],*p1[3][3],**p2[3],**p3[3][3],*(*p4)[3],(**p5)[3],(**p6)[3][3],(*(*p7))[3];p[1]=pc;p1[0][0]=pc;p2[0]=&pc;p3[0][0]=&pc;(*p4)[0]=pc;(**p5)[0]=c;(**p6)[0][0]=c;(**p7)[0]=c;注意,(*(*p7

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

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

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