贴代码吧,最明显了:
#include <stdio.h>
#include <string.h>
int main()
{
char s[] = "hello";
char *p = s;
printf("sizeof(s)=%d,sizeof(p)=%d\n",sizeof(s),sizeof(p)); //6,4
printf("strlen(s)=%d,strlen(p)=%d",strlen(s),strlen(p)); //5,5
system("pause");
return 0;
}
比较:
#include <stdio.h>
#include <string.h>
int main()
{
char s[] = {'h', 'e','l'};
char *p = s;
printf("sizeof(s)=%d,sizeof(p)=%d\n",sizeof(s),sizeof(p)); //3,4
printf("strlen(s)=%d,strlen(p)=%d",strlen(s),strlen(p)); //3,3
system("pause");
return 0;
}
在将字符串以数组的形式存储的时候,会自动在最后加一个\0字符,所以sizeof = strlen + 1.
而如果一个一个指定数组的各个值,就不会自动出现\0了。
sizeof:
sizeof(数组名),指的是数组占据的物理空间;sizeof(指针变量),结果均是4.
strlen(数组名)和strlen(指针变量)结果均是字符串的长度,不包括结尾的\0字符。
又如:
#include <stdio.h>
#include <string.h>
int main()
{
int s[] = {1,2,3};
int *p = s;
printf("sizeof(s)=%d,sizeof(p)=%d\n",sizeof(s),sizeof(p)); //12,4
// printf("strlen(s)=%d,strlen(p)=%d",strlen(s),strlen(p)); //5,5
system("pause");
return 0;
}