程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 程序猿之---C語言細節29(#define宏大小、空結構體大小、柔性數組不知道你見過沒)

程序猿之---C語言細節29(#define宏大小、空結構體大小、柔性數組不知道你見過沒)

編輯:關於C語言

程序猿之---C語言細節29(#define宏大小、空結構體大小、柔性數組不知道你見過沒)


主要內容:#define宏大小、空結構體大小、柔性數組

一、#define宏大小

見例子

二、空結構體大小

根編譯器有關

三、柔性數組

不常用,可看看

#include 

#define N 4
#define STR "abcd"

int main()
{
	struct student
	{
		
	}stu;

	printf("N = %d\n", sizeof(N));	
	printf("num 5 memery = %d\n", sizeof(5));
	printf("char 'd' = %d\n", sizeof('d'));	
	printf("STR = %d\n", sizeof(STR));	
	printf("a = %d\n",sizeof(stu));  // 在編譯器gcc、mingw5下輸出0,在vc++6.0中輸出1(我使用的mingw5編譯器),在vc++6.0中默認結構體最小大小為1字節(包含空結構體和只含一個char類型的結構體) 


/*
	柔性數組測試 
	可以參考《C語言深度解剖》 
*/
	printf("\n柔性數組測試\n");
	typedef struct test
	{
		int i;
		int a[];  // 此數組前必須包含一個其它成員 
	}te;
	printf("sizeof(te) = %d\n", sizeof(te));  // int a[] 不是結構體中的成員 
	te *p = (te*)malloc(sizeof(te) + sizeof(int) * 100);  
	p->a[0] = 13;
	printf("p->a[0] = %d\n",p->a[0]);
	printf("sizeof(p) = %d\n", sizeof(p));  // 大小仍然為4,因為int a[] 不是結構體中的成員  
	
	return 0;
}

輸出:


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved