sizeof是c语言中的一个运算符(像+、-、*、/),而不是一个函数。
sizeof用来返回()中变量或者数据类型占用的内存字节数
char str[]=“hello”;
sizeof(str);输出6,数组str总共包括了5个字符和一个’\0’.总共6个字节
sizeof(str[0]);输出1,输出了数组第一个元素所占用的字节数
strlen(str);输出5,strlen只会计算数组中字符所占的字节数,当找到‘\0’时,就停止了计算。
char str[] =“hello”;
char *p = str;
sizeof(p);输出4,相当于在计算指针变量类型char *所占用的字节数。
sizeof(*p);输出1,p中存放的是数组第一个元素的第一个地址。这么写相当于计算数组第一个元素占用的字节数。
strlen(p);输出5,相当于strlen(str)
int n=10;
sizeof(n);输出4,相当与sizeof(int),sizeof测试一个变量本省和测试这个变量的类型,两者的结果是一样的。
int n[100];
sizeof(n);输出400,100*sizeof(int)=400;
用#define和typedef两种形式替换char *的区别。
#define dpChar char *;
typedef char * tpChar;
dpChar p1,p2;//相当于char *p1,p2;
tpChar p3,p4;//相当于char *p3;char *p4;
计算数组元素个数的方法
int a[100];
int b = sizeof(a)/sizeof(a[0]);
子函数中用数组传参的问题
void func(int a[])
{
printf(“数组大小=%d\n”,sizeof(a));
}
int main(void)
{
int a[20];
func(a);
return 0;
}
这样的子函数,得到的结果,是4。
(1)函数传参,形参可以是数组。
(2)函数的形参为数组时,实际传递的不是整个数组,而是数组的首元素首地址。相当于传递的是指针。形参写成 int a[];和int *a;没有区别。
即数组在传参后,数组的大小就丢了,只剩下数组首元素首地址了。
如果要向子函数中传递一个数组(包括首地址和数组元素个数)
子函数的形参需要写成:
void func(int *a,int num)
引用时,func(a,sizeof(a))