1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| char a[]={'a','b','c','d','e','f'}; printf("%d\n",sizeof(a));//6 //sizeof计算整个数组大小 6*1=6 printf("%d\n",sizeof(a+0));//4 //a是首元素地址,a+0还是首元素地址,地址的大小在32位平台下是4个字节。 printf("%d\n",sizeof(*a));//1 //数组名表示数组首元素地址,*a表示首元素 printf("%d\n",sizeof(a[1]));//1 //a[1]第二个元素 printf("%d\n",sizeof(&a));//4 //&a整个数组的地址,但还是地址,4个字节 printf("%d\n",sizeof(&a+1));//4 //&a+1跳过整个数组后的地址,还是地址,4个字节 printf("%d\n",sizeof(&a[0]+1));//4 //&a[0]+1第二个元素地址,4个字节
//strlen函数从字符串的开头位置依次向后计数,遇见\0结束,最终计算的字符串长度不包括\0,strlen的参数是地址。 printf("%d\n",strlen(a));//随机值 printf("%d\n",strlen(a+0));//随机值 printf("%d\n",strlen(*a));//错误,strlen要的参数是地址 printf("%d\n",strlen(a[1]));//错误,strlen要的参数是地址 printf("%d\n",strlen(&a));//随机值 printf("%d\n",strlen(&a+1));//随机值-6 printf("%d\n",strlen(&a[0]+1));//随机值-1
|