C語言結構體中的問題,非高手莫進

時間 2022-03-23 18:14:12

1樓:匿名使用者

編譯對那個 char table; 這種定義會預設解釋成 char table[0];

零長陣列, 這個特性多數是編譯器的擴充套件, 零長陣列是不占用空間的,你它進行 sizeof() 返回是零, 它只是在語法上提供乙個符號, 訪問它相關於訪問 tt.num 後續的記憶體, 就像你第二個例子, 由於區域性變數是在棧上分配的, 所以 tt.table[0] 正好落在 begin 上第乙個位元組上(即低位元組), 所以 tt.

table[0] = 2 相當於:

((char *)&begin)[0] = 2;

2樓:匿名使用者

沒有給table分配空間,自然是位址不定了阿

3樓:匿名使用者

在c語言中,只有定義了變數系統才給分配空間,

而char table;這句話相當於char table[0];沒有申請到記憶體空間,只給了個起始位址,應為根本就沒有定義變數,只有char table[1];或者別的數字,才表示定義了char型變數table[0],只有定義了變數系統才給分配空間所以申請到的記憶體為0, 而且寫成這樣char table[1];表示從起始位址char table開始有了偏移量,並且因為是結構體,分配單位是4個位元組,也就是說寫成這樣的char table[1];表示分配到4個位元組大小的空間,直到char table[5];是才分配下乙個單位的空間,即為8個位元組的空間。

4樓:匿名使用者

零長度陣列:

它們作為結構體的最後乙個元素十分有用,如果結構體確實是變長物件的首部:

struct line ;

struct line *thisline = (struct line *)

malloc (sizeof (struct line) + this_length);

thisline->length = this_length;

在iso c89中,你需要給目錄分配長度1,意味著要浪費空間或者使malloc的引數變得複雜。

在iso c99中,你可以使用靈活的陣列元素,只是在語法和主義上有微小的差異。

靈活的陣列元素寫為contents不帶0。

靈活的陣列元素具有不完全的型別,所以sizeof操作也許不能被應用。作為零長度陣列的原始實現的奇怪之處,sizeof被賦值為0。

靈活的陣列元素可以作為結構體的最後乙個元素出現當其它元素非空時。定義僅含有乙個零長度陣列的結構體,無論如何,你可能會遇到問題。這樣的用法被反對,建議僅當靈活陣列元素被允許的地方使用零長度陣列。

關於C語言結構體定義的問題,C語言裡結構體的問題。結構體定義指標型別是怎麼回事?

parr t就是乙個指標。其中parr t中儲存著對應的位址 parr t就是這個位址對應的變數,而且這個變數是arphdr結構型別 我見過這樣的題,沒看懂你的意思,不過我看這樣說吧,structab 我打。的地方表示你可以在那裡新增所有的資料形式的定義,比如,int a char a 10 等等 ...

c語言結構體問題,C語言結構體成員的引用問題

c 允許使用者根據需要自己宣告一些型別,使用者可以自己宣告的型別還有結構體型別 structure 共用體型別 union 列舉型別 enumeration 類型別 class 等,這些統稱為使用者自定義型別 user defined type,udt struct student type,你已經...

C語言,結構體和函式的問題,關於C語言結構體和函式的問題

include struct math void main struct math add struct math s1,struct math s2 回答的人還挺多,居然沒樓上的手快,看來我只有增加內容了!說明 區域性函式需要乙個返回值,給z。這道題可以有三種解決方法 一 用指標,讓區域性函式返回...

C語言基礎結構體問題!跪求,C語言基礎結構體問題!跪求!!!

include include struct people int main int i,temp,k for i 0 i 4 i for i 1,k 0,temp p 0 point i 4 i if p i point typedef struct playerplayer 定義這樣的結構體,給...

C語言問題結構體

union是聯合體型別,裡面的元素占用同一段記憶體,也就是a 2 b c 4 都是存在一起的,修改其中任乙個都會影響其他元素的值 這個程式執行的結果和你使用的編譯器有關,如果是比較老的如turbo c,s在記憶體中就是這樣00380039 十六進製制 結果就是 380039 9如果是vc6.0或vs...