我是zoro
分类: LINUX
2010-10-27 10:45:58
char str[]="hello world\0";
char str2[12]="hello world\0";
char s1[]="";
char s2[]="hello world!";
char *p=s2;
char *q=NULL;
void *r=malloc(100);
sizeof(str)=13 //未规定数组个数,末位加'\0',即12+1=13
sizeof(str2)=12 //规定个数的数组,其大小为n*(单元大小)
sizeof(s1)=1 //系统自动补'\0'
sizeof(s2)=13
sizeof(p)=4 //p为指针
sizeof(q)=4
sizeof(r)=4
===============================
void func(char str[100])
{
sizeof(str)=?
}
答案:sizeof(str)=4
函数参数传递有两种方式:值传递和地址传递。上题传递方式为地址传递,str[100]虽为数组,但其接收的只是一个地址,char str[100]等同于char *str,sizeof(str)是计算指针的大小,在32计算机中,指针的大小均为4个字节。
============================
char str2[7]="hello world\0";
sizeof(str2)=7
strlen(str2)=11 //可见strlen是输出到'\0'结束