我正在为期中考试学习。这是一个示例代码
#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
存储在内存中)并添加存储3int
s所需的地址空间量(因为指针是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 - 2
到0
的所有值,但对从length - 2
到0
的值执行循环体,因为length - 3
是互斥的(在执行循环体之前对条件求值,因此当<
时,条件是i == length - 2
并且循环终止而不再执行)。
因此,对于每个元素(不包括最后两个元素),false
中的元素被添加到自身。
关于c - *(array + 3)如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33137453/