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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© huangsailin 中级黑马   /  2015-7-19 13:12  /  1078 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1)数组名就是一个指向数组首地址的指针常量。对于指针数组符号’[]’相当于指针符号’*’,所以数组元素的地址有下面几种表示: 
&a[0].......&a[i] a................a+i pa.............pa+i 
从技术上可以说数组就相当于指针,但是在声明一个数组,C语言编译时会分配一段固定的连续空间,而声明一个指针却不会。 
2)实际上C语言只有一维数组。多维数组其实可以理解为指针数组和普通数组的结合。
      例如,char a[2][5];可以理解为一个char *a[2]数组,里面的每个元素分别指向一个char b[5]数组。 
在二维数组x中,数组名x表示数组的首地址,x[i]表示一个一维数组的名称,(也就是说x[i]不保存元素值),它只是一个地址。x和x[i]的值相等,但是*a!=*a[0],因为a是一个二维数组首地址指针,a[0]一个一维数组首地址指针,引用它们指向的变量时会根据自己类型性质定义变量的类型性质。如下代码: 
void  main()     

 char a[2][6]={"Hello","World"};  char * p;  p = a; 
 if(a==a[0]) 
  printf("a==a[0]\n");  if(*a==*a[0]) 
  printf("*a==*a[0]\n");  if(*p==*a[0]) 
  printf("*p==*a[0]\n");  printf("%d\n",sizeof(a));  printf("%d\n",sizeof(a[0]));  getch(); } 
运算结果: a==a[0] *p==*a[0] 12 6 
x[i]表示数组的首地址,x[i][j]表示数组x[i]的第j+1个元素的值,&x[i][j]返回数组x[i]的第j+1个元素的地址。也可以使用*(x[i]+j)的方式表示第j+1个元素的值,而*(x[i]+j)又可表示为*(*(x+i)+j)。 
3)指针的运算:赋值、间接运算、求地址、递增、递减、求差、比较。指针加上后减去一个整数偏移的长度等于这个整数乘以指针所指数据类型的长度。如下面的代码: 
int main() 

 unsigned int i; 
 unsigned int *p = &i;  printf("%d %d",p,p+1);  getch(); } 
运行输出: -58   -56

9 个回复

倒序浏览
厉害!!!
回复 使用道具 举报
杠杠的!!!
回复 使用道具 举报
后天才学╮(╯▽╰)╭
回复 使用道具 举报
又回顾了一下知识,对自己的理解有帮助,赞一个
回复 使用道具 举报
总结的还可以
回复 使用道具 举报
顶一个~~~~~~
回复 使用道具 举报
wdcew 中级黑马 2015-7-21 00:26:28
8#
不错 支持一下!!!!
回复 使用道具 举报
兄弟,水得一手好帖啊~
回复 使用道具 举报
Xia_ 中级黑马 2015-7-21 00:34:57
10#
好厉害啊:lol:lol:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马