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 問題可以去看我的下一篇博客,里邊詳細的討論了字節對齊問題。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。