首页 > 解决方案 > 引用指针时出现意外值

问题描述

我正在使用OnlineGDB编译器来了解指针在 C 中是如何工作的。首先,我运行了以下代码并得到了我期望的输出:

int *array1[] = {1,4,3,4};

int main()
{
    printf("%d \n", array1[0+1]);
    printf("%d", array1[1+1]);

    return 0;
}

输出为:4 3

其次,我运行了以下代码 - 我无法理解它的输出:

int *array1[] = {1,4,3,4};

int main()
{
    printf("%d \n", array1[0]+1);
    printf("%d", array1[1]+1);

    return 0;
}

输出:5 8

好像我在数组的值上加了 4,但是为什么呢?(数组中的每个元素都由一个字节组成)。

谢谢!

标签: cpointers

解决方案


好像我在数组的值上加了 4,但是为什么呢?

不,数组的每个元素都是一个,int *因为您以这种方式声明了数组:

int *array1[] = {1,4,3,4};

array1就是一个数组,其值的类型指针指向int. *如果您想要一个数组,请删除int,例如:

int array1[] = {1,4,3,4};

当您从指针类型中添加或减去时,值会更改指针所指类型大小的一些倍数。您系统上的Anint可能是 4 个字节,所以像这样的表达式array1[0]+1获取int *存储的array[0]内容并增加它,所以它增加sizeof(int).

(数组中的每个元素都由一个字节组成)。

即使您已将数组声明为数组int而不是数组, anint *大小int也可能不是1 个字节。int通常为 4 个字节长,但大小取决于编译器和目标系统。


推荐阅读