C语言 数组与指针难点

 C陷阱与缺陷中关于数组与指针部分做了清晰的讲解,解除了我对于数组的很多困惑。特摘取部分内容以作记录。

数组指针难点一:

定义数组 int a[3];

除了a被用作运算符sizeof的参数这一情形,

在其他所有的情形中,

数组名a都代表指向数组a中下标为0的元素的指针

个人理解为右图的逻辑结构(在实际内存中不一定如此)

因此,我们不难得出一个推论,*a即数组中下标为0的元素的引用。

例如,我们可以这样写*a = 84;

这个语句将数组a中下标为0的元素的值设置为84。

同样道理,*(a+1)是数组a中下标为1的元素的引用,

依次类推。概而言之,*(a + i)即数组a中下标为i的元素的引用;

这种写法是如此常用,因此他被简记为a[i]。

又因为a + i与i + a的含义相同,因此a[i]与i[a]具有同样的含义。但不推荐后种写法。

难点二:

给一个指针加上一个整数,与给该指针的二进制表示加上同样的整数,两者的含义截然不同。

如果定义一个指针ip指向一个整数,那么ip + 1指向的是计算机内存中的下一个整数

在大多数现代计算机中,他都不同于ip所指向地址的下一个内存位置

因此,如果让ip = a,即ip也指向数组a中下标为0的元素。

ip + 1指向的是数组a中下标为1的元素。

原文地址:https://www.cnblogs.com/sdlwlxf/p/2842173.html