88-C語言中sizeof()和strlen()的異同點
阿新 • • 發佈:2020-12-16
sizeof() 是C/C++中的一個操作符(operator),簡單的說其作用就是返回一個物件或者型別所佔的記憶體位元組數。
strlen() 是C語言C++的函式,是所作的是一個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃描,直到碰到第一個字串結束符’\0’為止,然後返回計數器值(長度不包含’\0’)。在C/C++中使用strlen函式需要引標頭檔案 #inlcude<string.h>
以下程式在VS2012 win32中執行
用sizeof求型別所佔空間
#include<stdio.h>
int main()
{
printf("%d\n", sizeof(char));//char的長度為1個位元組
printf("%d\n",sizeof(int));//int的長度是4個位元組
printf("%d\n", sizeof(float));//float的長度是4個位元組
printf("%d\n", sizeof(double));//double的長度是8個位元組
return 0;
}
執行結果如下
sizeof求一維陣列大小
#include<stdio.h>
int main ()
{
int a[] = { 1, 2, 3, 4 };
printf("%d\n", sizeof(a));//16 是陣列的長度 單位位元組
printf("%d\n", sizeof(a+0));//4 是首元素的地址 是4個位元組
printf("%d\n", sizeof(*a));//4 是首元素的地址 是4個位元組
printf("%d\n", sizeof(a+1)); //4 是第二個元素的地址 是4個位元組
printf("%d\n", sizeof(a[1]));//4 是第二個元素的長度,是4個位元組
printf("%d\n", sizeof(&a));//4 是首元素的地址,是4個位元組
printf("%d\n", sizeof(*&a));//16 指標解應用指向首元素地址表示整個陣列,是16個位元組
printf("%d\n", sizeof(&a[0]));//4 是首元素的地址 是4個位元組
return 0;
}
執行結果如下
sizeof和strlen求字元陣列大小
字元數字是 char arr[] = { ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’ };
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(arr));//整個陣列的大小 6個位元組
printf("%d\n", sizeof(arr + 0));//首元素的地址 地址是4個位元組
printf("%d\n",sizeof( &arr));//首元素的地址 4
printf("%d\n", sizeof(&arr+1));//表示跳過這個陣列,但是還是表示地址,所以4位元組
printf("%d\n", sizeof(&arr[0] + 1));//表示第二個元素的地址 4位元組
printf("***************************\n");
printf("%d\n", strlen(arr)); //隨機值 沒有'\0'
printf("%d\n", strlen(arr+0));//隨機值
// printf("%d\n", strlen(*arr)); //err 因為找的是首元素的地址找到首元素'a'是97,出現錯誤、、
// printf("%d\n", strlen(arr[1]));//err 是第二個元素'b'
printf("%d\n", strlen(&arr[0]+1));//隨機值-1 從第二個元素開始找
return 0;
}
執行結果如下
字元陣列是這種的:char arr[] = “abcdef”;
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "abcdef";//這種初始化預設後面有一個'\0'
printf("%d\n", sizeof(arr));//整個陣列的大小 7個位元組 (包括\0)
printf("%d\n", sizeof(arr + 0));//首元素的地址 地址是4個位元組
printf("%d\n", sizeof(&arr));//首元素的地址 4
printf("%d\n", sizeof(&arr + 1));//表示跳過這個陣列,但是還是表示地址,所以4位元組
printf("%d\n", sizeof(&arr[0] + 1));//表示第二個元素的地址 4位元組
printf("***************************\n");
printf("%d\n", strlen(arr)); //6 整個陣列的大小
printf("%d\n", strlen(arr + 0));//6 整個陣列的大小
// printf("%d\n", strlen(*arr)); //err 因為找的是首元素的地址找到首元素'a'是97,出現錯誤、、
// printf("%d\n", strlen(arr[1]));//err 是第二個元素'b'
printf("%d\n", strlen(&arr[0] + 1));//5 從第二個元素開始找
return 0;
}
1.sizeof(陣列名),這裡的陣列名錶示整個陣列,計算的是整個陣列的大小
2.&陣列名,這裡的陣列名錶示整個陣列,取出的是整個陣列的地址
3 除此之外所有的陣列名都表示首元素的地址
另外注意字元陣列的區別,注意隱藏的’\0’, 注意sizeof和strlen使用的區別。