Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C *(数组+;3)是如何工作的?_C_Arrays - Fatal编程技术网

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
存储在内存中的位置),并添加存储3
int
所需的地址空间量(因为指针的类型为
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()的两倍祝你期中考试好运!