黑马程序员技术交流社区

标题: 数组指针和指针数组 [打印本页]

作者: i_iOS    时间: 2015-10-1 23:08
标题: 数组指针和指针数组
  1. //指针的特点
  2. //数组指针和指针数组
  3. /*
  4. 注意易错点:数组指针指向的是数组!所以移动的时候将该数组的总大小当做一个单位
  5. */

  6. #include <stdio.h>
  7. int main(){
  8.    
  9.     printf("------------数组指针理解-------本质是个指针,只不过指向的是数组--------------\n");
  10.     int a[3]={0,1,2};
  11.     int (*c)[3]=&a;//定义一个指向数组a的指针c,注意c是一个指针,是指向数组的!
  12.     //  int (*c)[3]=&a[0];//这样定义会有warning出现,而且与上一行打印结果相同
  13.     printf("定义如下:\nint a[3]={0,1,2};\nint (*c)[3]=&a;\n(*c)和a是等价的,所以有以下结果:\n");
  14.     printf("&(*c)[0]是%p\t&(*c)[1]是%p\t&(*c)[2]是%p\n",&(*c)[0],&(*c)[1],&(*c)[2]);
  15.     printf("a[0]的地址是%p\ta[1]的地址是%p\ta[2]的地址是%p\n",&a[0],&a[1],&a[2]);
  16.     printf("(*c)[0]是%d\t(*c)[1]是%d\t(*c)[2]是%d\n",(*c)[0],(*c)[1],(*c)[2]);
  17.     printf("a[0]是%d\t\ta[1]是%d\t\ta[2]是%d\n",a[0],a[1],a[2]);
  18.     printf("c是指向数组a的一个指针,所以c[0]中是数组a的地址,而c[1]是再加(sizeof(int)*3)个字节\n");
  19.     printf("c[0]是%p\t\tc[1]是%p\tc[2]是%p\n",c[0],c[1],c[2]);
  20.     printf("*c[0]是%d\t*c[1]是%d\t*c[2]是%d\n",*c[0],*c[1],*c[2]);
  21.    
  22.     printf("-----------指针数组理解--------本质是个数组,只不过存的是指针-----------------------\n");
  23.    
  24.     int b1=10;int b2=11;int b3=12;
  25.     int *q[3]={&b1,&b2,&b3};
  26.    
  27.     printf("定义:\nint b1=10;int b2=11;int b3=12; \nint *q[3]={&b1,&b2,&b3};\n");
  28.     printf("b1=%d\t\tb2=%d\t\tb3=%d\n",b1,b2,b3);
  29.     printf("*q[0]是%d\t*q[1]是%d\t*q[2]是%d\n",*q[0],*q[1],*q[2]);
  30.     printf("b1的地址是%p\tb2的地址是%p\tb3的地址是%p\n",&b1,&b2,&b3);
  31.     printf("q[0]是%p\t\tq[1]是%p\t\tq[2]是%p\n",q[0],q[1],q[2]);
  32.    
  33.     return 0;
  34.    
  35. }
复制代码

作者: 8430110    时间: 2015-10-2 16:15
不错,学习来!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2