我正在尝试打印一个数组但是我没有得到所需的输出,在循环完成打印预定义数组后会出现奇怪的数字.
代码是:
#include <stdio.h>
int main(){
int intArray[11] = {1,2,8,12,-13,-15,20,99,32767,10,31};
int i=0;
for(i=0;i<sizeof(intArray);i++){
printf("%d\n",intArray[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
8
12
-13
-15
20
99
32767
10
31
11
1629976468
2674040
2665720
1627423265
1
2665616
-2147417856
1629976534
1629976468
2674040
0
1627423172
1629976532
0
1629110043
0
0
0
0
0
0
0
0
0
0
0
1629976538
0
1629956432
2674276
0
1627407935
Run Code Online (Sandbox Code Playgroud)
Gri*_*han 14
for循环中的破坏条件是错误的!这会导致一个索引超出结合的问题如i超过最大索引值是10 因为数组的长度只是11.循环中断条件应该是<数组的长度(= 11)但不是 <数组的大小.值sizeof(intArray)等于11 * sizeof(int)(= 44).
6.5.3.4 sizeof运算符,1125:
将
sizeof运算符应用于数组类型时,结果是数组中的总字节数.
根据这个,当sizeof应用于静态数组标识符的名称(未通过malloc()/ 分配calloc())时,结果是整个数组的大小(以字节为单位)而不是地址.这等于每个元素的大小乘以数组的长度.
换句话说:sizeof(intArray)= 11 * sizeof(int) (intArray长度为11).因此假设如果sizeof(int)是4字节则sizeof(intArray)等于44.
下面的代码示例及其输出将帮助您进一步了解(阅读评论):
int main(){
int intArray[11] = {1, 2, 8, 12, -13, -15, 20, 99, 32767, 10, 31};
int i = 0;
printf("sizeof(intArray): %d\n",
sizeof(intArray) //1. Total size of array
);
printf("sizeof(intArray[0]): %d\n",
sizeof(intArray[0]) //2. Size of one element
);
printf("length: %d\n",
sizeof(intArray) / sizeof(intArray[0]) //3. Divide Size
);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
sizeof(intArray): 44 //1. Total size of array: 11 * 4 = 44
sizeof(intArray[0]): 4 //2. Size of one element: 4
length: 11 //3. Divide Size: 44 / 4 = 11
Run Code Online (Sandbox Code Playgroud)
可以检查工作代码@ ideone,注意:我假设int的大小是4.
现在注意的sizeof(intArray)是44这更多的则是数组的长度,因此该条件是错误的,你有不确定的行为在运行时的代码.要更正它,请更换:
for(i=0; i < sizeof(intArray); i++)
// ^--replace-----^
// wrong condition = 44
Run Code Online (Sandbox Code Playgroud)
附:
for(i=0; i < sizeof(intArray) / sizeof(intArray[0]); i++)
// ^------------------------------------^
// condition Corrected = 11
Run Code Online (Sandbox Code Playgroud)
为了计算数组的长度,我简单地将数组的总大小除以一个元素的大小,代码是:
sizeof(intArray) / sizeof(intArray[0]) // 44 / 4 = 11
^ ^
total size of size of first element
array
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3307 次 |
| 最近记录: |