1樓:匿名使用者
這個涉及到結構體的記憶體對齊問題。
一、結構體變數中成員的偏移量必須是成員大小的整數倍(0被認為是任何數的整數倍)
二、結構體大小必須是所有成員大小的整數倍。
1,首先對於結構體test。
float佔4個位元組,char name[10]相當於2個節位元組,再加乙個2位元組。
由於剩下的2位元組不足乙個float,所以補2位元組空資訊到test.
所以test結構體總共為4+2*4+4=162.所以兩個test也就是a[2]就佔32有什麼其它的問題也可以問我,我hi常**。
2樓:匿名使用者
首先我們看看sizeof(test)為什麼=16?
test是乙個結構,由乙個10位的char型陣列和乙個float 型變數組成。那麼在記憶體中組成test這個結構的時候系統是怎麼分配記憶體的呢?10個char型變數是10位,乙個float型是4位。
理論上應該是10+4=14位,但是系統是這樣執行的。
11111111 8位位元組。
11111100 2個char佔兩位,乙個float佔4位。其餘兩位沒用,但是其他資料不得佔用。
這就是其在記憶體中的結構。佔16位。
響應的,sizeof(a)就是2個16位相加=32位。
3樓:匿名使用者
第乙個是(10+4)*2=28
第二個是 10+4=14
由於編譯器缺省會對長度進行對齊。
即2的整數倍。
所以28變32
14變16可以在頂部加句 #pragma pack (2)按1個位元組對齊。
4樓:丁飛閆闌
在主函式裡面:array為8個單位的整型陣列,佔32個位元組,sizeof(int)測整型的長度,為4個位元組,所以sizeof(array)/sizeof(int)=8;
在func1裡面:array為指標型別的形參,sizeof對任意指標測長度均為4個位元組,所以sizeof(array)/sizeof(int)=1
5樓:容霜柳會
voidfunc1(int
array)中。int
array為指標。sizeof(array)即指標的長度為4個位元組。
而sizeof(int)
為4所以結果為1
而主函式中sizeof(array)求的是陣列的大小。
這個陣列大小為4*8=32
除以4結果為8
注意。void
main()
呼叫fun1(array)
做了次隱式轉換。
將陣列首位址轉換為指標。
陣列的型別是int
而指標的型別為int
二者不完全等價。
6樓:碧闌摩寄柔
func1(array);
這裡array已經退化成了指標,不再是乙個陣列了,指標佔4個位元組。
所以4/4=1
c語言 字串長度問題!
7樓:匿名使用者
第乙個字串長度為9(\x44 表示d,\\表示\,表示回車,\102表示b)
0:a1:d
4:b5:c
6:d7:b
8:a---第二個字串長度為7(\t 表示製表符,\xab表示乙個字元,\3表示乙個字元,\\表示\)
0:x1:y2:z3:
8樓:匿名使用者
串1:9 串2:7
分析過程:1.\x44 按16進製制轉義 0x44 即:ascii碼為682. \轉義。
3. \102 轉義。
1. \t轉義。
2. \xab 轉義 同上, 轉義的是16進製製數 0xab3. \轉義。
#include
int main()
9樓:草民不懂不懂
16b、12b。和\t算乙個位元組其他就數過來。
c語言字串陣列逆序問題,C語言字串陣列逆序問題
第乙個問題 字串陣列的長度不包括最後的 0 第二處問題 1 把 for i 0 str1 i 0 i 後面加上乙個分號 2 把for i 0 str1 i 0 i 後面的花括號去掉 3 再把 puts str1 前面的花括號去掉就可以了 程式如下 include stdio.h int main c...
C語言字串問題
本質原因是 陣列名是個常量,不可以賦值。所以char s 10 s world 是不合法的,因為你在給乙個常量賦值。而char s 10 實際上是給s的元素賦值。即 計算機先分配乙個空間,把空間的位址初始化給s,此時s已經是個字元指標常量了,以後不能給他賦值了。接著 實際上是給s這個陣列裡的元素賦值...
統計字串中最長單詞的長度!C語言
if str i a str i z 這句有點問題,z和a之間還有一些字元,應該排除掉 這個程式的主要問題是當讀到最後乙個字元null時,for迴圈退出,這時,count的值對應最後乙個單詞,而這時這個單詞的長度沒有進入for中的else進行比較,從而max的值會不對.所以你再在for後面加幾句 比...