生活随笔
收集整理的這篇文章主要介紹了
结构体struct
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 空結構體
- 2 結構體與柔性數組
- 3 C++中struct關鍵字的加強
1 空結構體
1.1 空結構體占用多大內存
C語言中的struct可以看作是變量的集合,那么空結構體占用多大內存呢?
對于,如下代碼:
#include <stdio.h>struct TS
{};int main()
{struct TS t1
;struct TS t2
;printf("sizeof(struct TS) = %d\n", sizeof(struct TS
));printf("sizeof(t1) = %d, &t1 = %p\n", sizeof(t1
), &t1
);printf("sizeof(t2) = %d, &t2 = %p\n", sizeof(t2
), &t2
);return 0;
}
對于BCC、VC編譯器是直接報錯的,不能定義空結構體,而對于gcc編譯器則是可以編譯通過的,運行結果如下:
2 結構體與柔性數組
2.1 柔性數組的概念
柔性數組的概念:
- 柔性數組即數組大小待定的數組。
- C語言中可以由結構體產生柔性數組。
- C語言中結構體最后一個元素可以是大小未知的數組。
SoftArray中的array僅是一個待使用的標識符,不占用存儲空間。
2.2 柔性數組的用法
一般,我們可以如下使用柔性數組:
柔性數組使用示例:
#include <stdio.h>
#include <malloc.h>struct SoftArray
{int len
;int array
[];
};struct SoftArray
* create_soft_array(int size
)
{struct SoftArray
* ret
= NULL;if( size
> 0 ){ret
= (struct SoftArray
*)malloc(sizeof(struct SoftArray
) + sizeof(int) * size
);ret
->len
= size
;}return ret
;
}void delete_soft_array(struct SoftArray
* sa
)
{free(sa
);
}void func(struct SoftArray
* sa
)
{int i
= 0;if( NULL != sa
){for(i
=0; i
<sa
->len
; i
++){sa
->array
[i
] = i
+ 1;}}
}int main()
{int i
= 0;struct SoftArray
* sa
= create_soft_array(10);func(sa
);for(i
=0; i
<sa
->len
; i
++){printf("%d\n", sa
->array
[i
]);}delete_soft_array(sa
);return 0;
}
3 C++中struct關鍵字的加強
3.1 struct關鍵字的加強
C++中struct關鍵字的加強:
- C語言中的struct定義了一組變量的集合。
- C語言中struct定義的標識符并不是一種全新的類型。
- C++中的struct用于定義一個全新的類型。
參考資料:
C語言進階剖析教程C++深度解析教程
總結
以上是生活随笔為你收集整理的结构体struct的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。