[英]How does *(array + 3) work?
我正在为期中学习。 这是一个示例代码
#include <stdio.h>
void doubleArray(int array[], int length)
{
for (int i = 0; i < length-2; i++) {
array[i] += array[i];
}
length += 5;
printf(“%d\n”, length); // Question 29
}
int main(int argc,char *argv[]) {
int integers[6] = { 3, 4, 5, 6, 7, 8};
int length = 6;
printf(“%d\n”, integers[4]); // Question 28
doubleArray(integers, length);
printf(“%d\n”, *(integers + 3)); // Question 30
printf(“%d\n”, *(integers + 4)); // Question 31
printf(“%d\n”, length); // Question 32
}
对于问题30和31,答案是它打印12(30)和7(31),有人可以向我解释“ *(integers + 3)”的含义和含义吗?
*
是指针的取消引用运算符。
这意味着它将“获取”存储在紧随其后的项的指针地址处的值( (integers + 3)
)。
它将将此值解释为其后的引用类型( int
因为(integers + 3)
的类型为int*
)
(整数+ 3)
integers
是一个指向integers
数组第一个元素的地址的指针。
这意味着,如果integers
包含[1, 2, 3, 4, 5]
则它将指向1
在内存中的存储位置。
integers + 3
取的地址integers
(即,其中1
被存储在存储器中),并增加了的地址空间来存储3所需的量int
S(因为该指针是类型的int*
)。 将其前进一个空格将为您提供内存2
的地址,将其前进两个空格将为您提供内存3
的地址,将其前进三个空格将为您提供内存4
的地址。
这如何适用于您的示例
(integers + 3)
为您提供integers
数组中integers
的地址,因为它是第一个元素的地址加上三个元素的大小。
使用*
运算符将其解引用,可以得到第4个元素的值12
(因为doubleArray
将6
的值加倍了)
*(integers + 4)
同样适用,除了doubleArray
并没有将第5个元素加倍,因此给了7
。
doubleArray
如何工作
for (int i = 0; i < length-2; i++)
表示将变量i
从0开始,并将其前进直到它为length - 2
。
这意味着它将取从0
到length - 2
的所有值,但是对于从0
到length - 3
值执行循环的主体,因为<
是唯一的(在执行循环的主体之前先评估条件,因此当i == length - 2
,条件为false
,循环终止,无需进一步执行。
因此,对于每个元素(最后两个元素除外), array
的元素都会添加到自身中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.