A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© i_iOS 中级黑马   /  2015-9-29 21:09  /  461 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码

1 个回复

倒序浏览
打印出来供自己理解用的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马