gpt4 book ai didi

c - 为什么数组的值后面跟着三个零?

转载 作者:行者123 更新时间:2023-11-30 21:14:05 25 4
gpt4 key购买 nike

这是程序:-

#include<stdio.h>
int main()
{
int a[8]={1,2,3,4,5,6,7,8,9},i;
char* p;
p=(char*)a;
printf("%d",*p);
for( i=0;i<32;i++)
{
p=p+1;
printf("%d",*p);
}
return 0;

}

输出:-

$ ./a.out
100020003000400050006000700080000

为什么输出是这样的?
为什么数组的值后面有三个零?

char 指针增加 1 个字节。 1在内存中的二进制表示是0000000 00000000 00000000 00000001,对吗?所以输出应该是 0 0 0 1。如果错误请解释。

最佳答案

解决方案

char 一般为 1 个字节,而 int 一般为 4 个字节。在内存中,如果您需要将 char 指针 增加 4 次才能完全增加 int

改变

char* p;
p=(char*)a;

至:

int* p;
p=(int*)a;

这将删除所有零

也改变

int a[8]={1,2,3,4,5,6,7,8,9},i;

至:

int a[9]={1,2,3,4,5,6,7,8,9},i;

因为您没有分配足够的空间并进行更改

printf("%d",*p);
for( i=0;i<32;i++)
{
p=p+1;
printf("%d",*p);
}

至:

for(i=0; i<9; i++)
{
printf("%d",*p);
p=p+1;
}

内存映射可视化C 和大多数语言中的数组只是存储在连续内存位置中的元素。 int array[2] = {1,2} 在内存中将如下所示:

// Assuming array starts at location 0x000 (in hex) 
// Keep in mind a byte is 8 bits so a byte can contain values from 0x00 to 0xff
location: value:
0x00 = [0x01] // first byte of first int
0x01 = [0x00] // second byte of first int
0x02 = [0x00] // third byte of first int
0x03 = [0x00] // fourth byte of first int
0x04 = [0x02] // first byte of second int
0x05 = [0x00] // second byte of second int
0x06 = [0x00] // third byte of second int
0x07 = [0x00] // fourth byte of second int

可以看到,int占用了4个字节。 int * 增加 4 个内存位置,这将使您到达下一个整数值。在您的例子中,在增加 char * 后,您仅增加该 int 的四分之一并打印出零(其中 3 个)。

如果您尝试 int array[2] = {256, 2} 并使用 char * 迭代它,我相信您会打印出:

0 1 0 0 2 0 0 0

这是因为 256 等于 0x100,因此它不能存储在字节中,而必须使用第一个 int 内的第二个字节。内存映射将如下所示:

location:   value:
0x00 = [0x00] // first byte of first int
0x01 = [0x01] // second byte of first int
0x02 = [0x00] // third byte of first int
0x03 = [0x00] // fourth byte of first int
0x04 = [0x02] // first byte of second int
0x05 = [0x00] // second byte of second int
0x06 = [0x00] // third byte of second int
0x07 = [0x00] // fourth byte of second int

关于c - 为什么数组的值后面跟着三个零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36114016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com