C *(数组+;3)是如何工作的?
我正在准备期中考试。这是一个示例代码C *(数组+;3)是如何工作的?,c,arrays,C,Arrays,我正在准备期中考试。这是一个示例代码 #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,ch
#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
}
#包括
无效双数组(整数数组[],整数长度)
{
对于(int i=0;i
关于问题30和31
答案是它打印12(30)和7(31)
有人能给我解释一下“*(整数+3)”的原因和含义吗?
*
是指针上的解引用运算符。
这意味着它将“获取”存储在该项后面的指针地址处的值((integers+3)
)
它会将此值解释为其后面项目的取消引用类型(int
,因为(整数+3)
属于int*
类型)
(整数+3)
integers
是指向integers
数组的第一个元素的地址的指针
这意味着,如果整数包含[1,2,3,4,5]
,那么它将指向1
存储在内存中的位置
integers+3
获取integers
的地址(即1
存储在内存中的位置),并添加存储3int
所需的地址空间量(因为指针的类型为int*
)。将其向前推进一个空格将为您提供内存中2
的地址,将其向前推进两个空格将为您提供内存中3
的地址,将其向前推进三个空格将为您提供内存中4
的地址
这如何适用于您的示例
(integers+3)
提供了integers
数组中第四项的地址,因为它是第一个元素的地址加上三个元素的大小
使用*
运算符取消引用该值,将得到第四个元素12
(因为6
的值是doubleArray
的两倍)
这同样适用于*(整数+4)
,除了doubleArray
没有将第5个元素加倍,因此它提供了7
双数组的工作原理
for(int i=0;i
意味着在0处启动变量i
,并将其向前推进,直到变量length-2
这意味着它获取从0
到length-2
的所有值,但执行从0
到length-3
的值的循环体,因为的含义与整数[3]
的含义相同。printf(%d\n',*(integers+3)),那么它是如何打印成12的呢?它是doubleArray()的两倍祝你期中考试好运!