a、首先sizeofz是运算符,在头文件中typedef 为unsigned int,其值在编译时计算的
b、strlen()是函数,是运行时计算,参数必须是字符型指针(char *),返回值是字符串的长度(从代表该字符的第一个地址开始,直到遇到第一个NULL结束)。
c.sizeof()不同参数的不同含义:1.数组:编译时数组空间的大小,在c99之前这个很好理解,因为c89要求必须在编译期间确定数组的大小,但是在c99之后出现了动态数组int a[i],不知道怎么算。2.指针,值是指针本身所用内空大小(4)3.类型(int、float)是该类型占用的内存空间,不同机器上可能不同。4.函数,值是函数的返回值类型的大小5.*p,求的是p指针指向的对象占用内空的大小。
5关于字符串常量的问题(就是用""引起来的部分),由于sizeof求的是实际占用的内空空间,而strlen则不包括null占用的空间,因此在求字符串常量时,这两个结果会不同。
注意:字符数组是系统不会添加NULl的,编译器只会对char a[] = "abc“;这种情况自动添加NULl作为结束符,对于char a[3]={'a','b','c'};是不添加的。