c - 引用指针时出现意外值
问题描述
我正在使用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,但是为什么呢?(数组中的每个元素都由一个字节组成)。
谢谢!
解决方案
好像我在数组的值上加了 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 个字节长,但大小取决于编译器和目标系统。