下载此文档

C指针的用法总结.doc


文档分类:IT计算机 | 页数:约10页 举报非法文档有奖
1/10
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/10 下载此文档
文档列表 文档介绍
C 指针的用法总结 char *p, **p, ***p; char p[],p[][],p[][][]; char *p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][]; void ( *pFun )( int i); 大神们看到这些东西脑袋里一定像蓝天白云一样清晰明了。。。(1) 关于指针与数组的存储 a 、指针和数组在内存中的存储形式数组 p[N] 创建时, 对应着内存中一个数组空间的分配, 其地址和容量在数组生命周期内一般不可改变。数组名 p 本身是一个常量, 即分配数组空间的地址值, 这个值在编译时会替换成一个常数, 在运行时没有任何内存空间来存储这个值, 它和数组长度一起存在于代码中( 应该是符号表中), 在链接时已经制定好了; 而指针*p 创建时, 对应内存中这个指针变量的空间分配, 至于这个空间内填什么值即这个指针变量的值是多少, 要看它在程序中被如何初始化,这也决定了指针指向哪一块内存地址。 b 、指针和数组的赋值与初始化根据上文, 一般情况下, 数组的地址不能修改, 内容可以修改; 而指针的内容可以修改,指针指向的内容也可以修改,但这之前要为指针初始化。如: int p[5]; p=p+1; 是不允许的而 p[0]=1; 是可以的; // int *p; p=p+1; 是允许的 p[0]=1; 是不允许的,因为指针没有初始化; // int i; int *p=&i; p[0]=1; 是允许的; 对于字符指针还有比较特殊的情况。如: char * p="abc"; p[0]='d'; 是不允许的为什么初始化了的字符指针不能改变其指向的内容呢?这是因为 p 指向的是“常量”字符串,字符串"abc" 实际是存储在程序的静态存储区的,因此内容不能改变。这里常量字符串的地址确定在先,将指针指向其在后。而 char p[]="abc"; p[0]='d'; 是允许的这是因为, 这个初始化实际上是把常量直接赋值给数组, 即写到为数组分配的内存空间。这里数组内存分配在先,赋值在后。(2) 关于一些表达式的含义 char *p, **p, ***p; char p[],p[][],p[][][]; char *p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][]; 能清晰地知道以上表达式的含义吗?(知道的去死!) 第一组: char *p, **p, ***p; 分别为 char 指针; char* 指针,即指向 char* 类型数据地址的指针; char** 指针,即指向 char** 类型数据的指针;他们都是占 4 字节空间的指针。如: char c='a'; char *p=&c; char **p1=&p; char ***p2=&p1; cout<<***p2<<endl; 第二组: char p[],p[][],p[][][]; 分别为一维,二维和三维 char 型数组,即数组,数组的数组, < 数组的数组> 的数组。可以如下的方式进行初始化: char pp[3]="ab"; char pp1[3][3]={"ab"}; char pp2[3][3][3]={{"ab"}}; 现在我们尝试使用第二组三个数组名对应为第一组三个指针赋值,

C指针的用法总结 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数10
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xxj16588
  • 文件大小0 KB
  • 时间2016-08-01