天天看點

C語言 strlen(str)和sizeof(arr)的差別C語言 strlen(str)和sizeof(arr)的差別

C語言 strlen(str)和sizeof(arr)的差別

1. strlen()

strlen(str):表示是運算符,而不是一個函數。sizeof傳回的值表示的含義如下: 該函數實際完成的功能是從代表該字元串的第一個位址開始周遊,直到遇到結束符’\0’。傳回的長度大小不包括’\0’

數組——配置設定的數組空間大小
指針——存儲該指針所用的空間大小
類型——該類型所占的空間大小 
對象——對象的實際占用空間大小 
函數——函數的傳回類型所占的空間大小,函數的傳回類型不能是void
           
char arr[] ="Hello world"; 
	  char *p =arr;
      printf("%d\n",strlen(arr));//11
      printf("%d\n",strlen(p));//11
           

2. sizeof()

sizeof(str) 是一個單目運算符,而不是一個函數。與函數 strlen 不同,它的參數可以是數組、指針、類型、對象、函數等.

它的功能: strlen隻關心存儲的資料内容,不關心空間的大小和類型。

char arr[] ="Hello world"; 
	  char *p =arr;
 	  printf("%d\n",sizeof arr);//12:自動增加一個'\0' ,表示結束符 
	  printf("%d\n",sizeof p);//4  首位址占4個位元組
           

需要解釋的是sizeof p,P為指針,傳回的是首位址占4個位元組長度。

總結:其作用就是傳回一個對象或者類型所占的記憶體位元組數

printf("%d\n", sizeof(char));//1
    printf("%d\n", sizeof(int));//4
    printf("%d\n", sizeof(double));//8
    printf("%d\n", sizeof(float));//4
    printf("%d\n", sizeof(1));//4
           

執行個體如下:

//32位系統 
 #include<stdio.h>
 #include<string.h>
  int a(char c[]){
 	 printf("%d\n",strlen(c)); //11 
	 printf("%d\n",sizeof(c));//4 首位址占4個位元組 
 }
 int main(){
 	 char arr[] ="Hello world"; 
	  char *p =arr;
 		printf("%d\n",strlen(arr));//11
 		printf("%d\n",strlen(p));//11
 		printf("%d\n",sizeof arr);//12:自動增加一個'\0' ,表示結束符 
		printf("%d\n",sizeof p);//4 首位址占4個位元組
 		a(arr);
 }
           

繼續閱讀