繁体   English   中英

*(array + 3)如何工作?

[英]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 (因为doubleArray6的值加倍了)

*(integers + 4)同样适用,除​​了doubleArray并没有将第5个元素加倍,因此给了7

doubleArray如何工作

for (int i = 0; i < length-2; i++)表示将变量i从0开始,并将其前进直到它为length - 2

这意味着它将取从0length - 2的所有值,但是对于从0length - 3值执行循环的主体,因为<是唯一的(在执行循环的主体之前先评估条件,因此当i == length - 2 ,条件为false ,循环终止,无需进一步执行。

因此,对于每个元素(最后两个元素除外), array的元素都会添加到自身中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM