2
回答
长度为0的数组的size为什么不一定是0?
开发十年,就只剩下这套Java开发体系了   

最近在coding的时候无意间接触到了长度为0的数组,在网上查了一些资料,但是一直似懂非懂,不知道他的原理是什么,在程序运行过程中到底是怎么执行的。

我之前看到的资料都说是不会给长度为0的数组分配内存,所以sizeof的时候返回的都是0。我试了一下,这点没有问题,但是当我把他放在结构体中的时候,一次偶然,我发现了一些我不能理解情况,特来请假各位大神,代码如下:

#include <stdio.h>
#include <netdb.h> 

typedef struct {
	uint8_t c1;
	uint8_t c2;
	uint8_t c3;
	int c4[0];
} test;

int main()
{
	uint32_t a[0];
	printf("%d\n", sizeof(a));
       test c = {.c1 = 1, .c2 = 2, .c3 = 3};
	printf("address of c: %d\n", &c);
	printf("address of c1: %d\n", &(c.c1));
	printf("context of c1: %d\n", (c.c1));
	printf("address of c2: %d\n", &(c.c2));
	printf("context of c2: %d\n", (c.c2));
	printf("address of c3: %d\n", &(c.c3));
	printf("context of c3: %d\n", (c.c3));
	printf("address of c4: %d\n", &(c.c4));
	printf("context of c4: %d\n", (c.c4));
	printf("sizeof sturct is: %d\n", sizeof(test));
	return 0;
}



输出的结果如下:

0
address of c: -1075537352
address of c1: -1075537352
context of c1: 1
address of c2: -1075537351
context of c2: 2
address of c3: -1075537350
context of c3: 3
address of c4: -1075537348
context of c4: -1075537348
sizeof sturct is: 4



我的疑问是:为什么这里struct的size是4呢?当我c4的类型改为uint8_t之后size就是3了,但是这和c4的类型有什么关系呢?谢谢

GCC
举报
andycoder
发帖于5年前 2回/928阅
顶部