C語言sizeof的問題


sizeof與strlen區別:

 

sizeof()是運算符,在頭文件中類型為unsigned int,它的參數可以是數組,指針,類型,對象,函數。

它的功能是:獲得保證能容納實現所建立的最大對象的字節大小。

具體而言,當參數分別如下時,sizeof返回的值表示的含義如下:

數組:編譯時分配的數組空間的大小;

指針:存儲該指針所用的空間的大小 (存儲該指針的地址的長度);

類型:該類型所占的空間的大小;

對象:對象的實際占用空間大小;

函數:函數的返回類型所占的空間的大小,函數的返回類型不能是void;

 

strlen()是函數,要在運行時才能計算。參數必須是字符型指針(char*)。當數組名作為參數傳入時,實際上就是數組退化為指針了。

它的功能是:返回字符串的長度。

該函數實際完成的功能是從代表該字符串的第一個地址開始遍歷,直到遇到結束符NULL(‘\0’)。返回的長度不包括NULL。

 

實例: char ss [] = "Hello\0World";

sizeof(ss)和strlen(ss)分別是多少?

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main()
 5 {
 6     int a,b;
 7     char ss[]=”Hello\0World”;
 8     
 9     a= sizeof(ss);
10     b= strlen(ss);
11     
12     printf(“%d,%d\n”,a,b);
13     
14     return 0
15 }

輸出結果:12,5

上述的是sizeof與strlen的區別,sizeof是為了測參數的字節大小,主要用於結構體大小的測量。

 

下面是幾個編譯器中為各類型數據分配的空間:

    dev c++中char占1個字節,int占4個字節,float占4個字節,double占8個字節

    vs2015中char占1個字節,int占4個字節,float占4個字節,double占8個字節

 

對於結構體變量有:

  計算機對內存的管理是以“字”為單位的(許多計算機系統以四個字節為一個“字”)。如果在一個“字”中只存放了一個字符,雖然只占一個字節,但該“字”中的其他3個字節不會接着存放下一個數據,而會從下一個“字”開始存放其他數據。因此在用sizeof運算符測量結構體數據的長度時,等到的值一定是4的倍數!

  這句話實在譚的書上看到的,當時信奉為秘訣,但是不幸的在一次考核中吃了虧之后,我才發現這全tm是在扯淡,關於結構體中的 sizeof 問題可以去看我的下一篇博客,里邊詳細的討論了字節對齊問題。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com