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);
}