通过指针引用数组,通过数组引用指针,你搞明白了么?通过下面3种情形来了解一下数组和指针
Case 1.
unsigned char arry[10]; unsigned char *ptr; unsigned char a, b, c;
ptr = arry;
a = ptr[0];
b = ptr[1];
c = ptr[2];
Case 2.
unsigned char arry[10]; unsigned char *ptr; unsigned char a, b, c; ptr = arry; a = *ptr; b = *(ptr+1); c = *(ptr+2);
Case 3.
unsigned char *ptr = (unsigned char *)0x20000000; unsigned char a, b, c; a = ptr[0]; b = ptr[1]; c = ptr[2];
以上3种情形编译都能通过,想要表达的是怎样用数组的方式(下标)表达一个指针内容,和怎样用指针变量的方式表达一个数组。
对于Case 1,C语言规定,数组名(不包括形参数组名,形参数组并不占据实际的内存单元)代表数组中首元素(即序号为0的元素)的地址,所以ptr指向数组Arry的首地址。那么带下标的指针变量是什么含义呢?其实在程序编译的时候,对下标的处理方法是转换为地址的,对ptr[i]处理成*(ptr+i)。
Case 2 是指针的常规引用,Case 3和Case 1类似,都是带下标的指针变量的应用。
通过以上的简单分析,可以得出一个结论,下标法直观,指针变量法效率高。
[参考]:
[1] 谭浩强著. C程序设计教程. 北京:清华大学出版社,2007
/×××××××××××××××××××××××××××××××××××××××× THE END××××××××××××××××××××××××××××××××××××××××××××/