gpt4 book ai didi

c - *(array + 3) 是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-04 02:39:56 26 4
gpt4 key购买 nike

我正在为期中考试学习。这是一个示例代码

#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)有人可以向我解释为什么“*(整数 + 3)”是什么意思吗?

最佳答案

*是指针上的取消引用运算符。

这意味着它将“获取”存储在紧随其后的项目的指针地址处的值 ( (integers + 3) )。

它将此值解释为其后项目的取消引用类型( int 因为 (integers + 3)int* 类型)

(整数 + 3)

integers是指向 integers 的第一个元素地址的指针数组。

这意味着如果 integers包含[1, 2, 3, 4, 5]那么它会指向哪里 1存储在内存中。

integers + 3integers 的地址(即 1 存储在内存中的位置)并添加存储 3 int 所需的地址空间量s (因为指针的类型是 int* )。将它向前推进一个空格将为您提供地址 2在内存中,将它推进两个空格将为您提供地址 3在内存中,将它向前移动三个空格就会得到 4 的地址在内存中。

这如何适用于您的示例

(integers + 3)为您提供 integers 中第 4 项的地址数组,因为它是第一个元素的地址加上三个元素的大小。

* 解除引用运算符,为您提供第 4 个元素的值 12 (因为 6 的值是 doubleArray 的两倍)

同样适用于*(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 中的元素被添加到自身。

关于c - *(array + 3) 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33137453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com