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

#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 + 3获取integers的地址(即1存储在内存中)并添加存储3ints所需的地址空间量(因为指针是int*类型)。将它向前推进一个空格将给你内存中2的地址,将它向前推进两个空格将给你内存中3的地址,将它向前推进三个空格将给你内存中4的地址。
这如何适用于您的示例
(integers + 3)提供integers数组中第四个项的地址,因为它是第一个元素的地址加上三个元素的大小。
使用*运算符取消对其的引用,得到第四个元素的值12(因为6的值是doubleArray的两倍)
这同样适用于*(integers + 4)除了doubleArray没有加倍第5个元素,所以它给你7
如何工作
doubleArray意味着在0开始变量for (int i = 0; i < length-2; i++)并将其推进到i为止。
这意味着它接受从length - 20的所有值,但对从length - 20的值执行循环体,因为length - 3是互斥的(在执行循环体之前对条件求值,因此当<时,条件是i == length - 2并且循环终止而不再执行)。
因此,对于每个元素(不包括最后两个元素),false中的元素被添加到自身。

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

10-10 15:54