首页 > 解决方案 > 一个空数组如何参与计算?

问题描述

#include <stdio.h>

int f( int *x ) {
    *x = 35;
}

int main( int argc, char *argv[] ) {
    int p[32];
    int *q = p + 5;

    f( q );

    printf( "%d", p[5] );

    return 0;    
}

你能解释一下为什么输出是35吗?

我试图通过使用printf("%d", p)和之后输出 p 的值int p[32],它返回了一个-2077686688.

我认为这只是因为我还没有为p[32]数组分配任何值,所以它只是返回了一个随机数。

然而,最让我困惑的部分是*q = p + 5

数组怎么能做到这一点?

既然p数组中没有值,那么它怎么能在这个表达式中只返回它的大小呢?

标签: c

解决方案


在您的代码中,int p[32]留出一个大小为 32 的数组,可以使用p. 当您定义为时qp + 5您将分配q为指向内存中第 6 个(索引为 1)的元素的指针,从p指向的位置开始。

当您传递qtof()时, at 的值q设置为35之前的任何值(未初始化的内存)。由于q指向与 相同的位置p[5],因为那p[5]35由 设置在内存中的位置的值f()


推荐阅读