[C语言基础] 数组与指针之间的引用

通过指针引用数组,通过数组引用指针,你搞明白了么?通过下面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××××××××××××××××××××××××××××××××××××××××××××/

原文地址:https://www.cnblogs.com/mr-bike/p/3661990.html