1. 程式人生 > 其它 >88-C語言中sizeof()和strlen()的異同點

88-C語言中sizeof()和strlen()的異同點

技術標籤:C語言c語言

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使用的區別。