如何判断 int 普通数组a[]={0} ?
#include<stdio.h> int main() { int a[] = {1,2,3,4}; printf("%d\n",sizeof(a)); //16 printf("%d\n",sizeof(a+0));//4 printf("%d\n",sizeof(*a)); //4 printf("%d\n",sizeof(a+1)); //4 printf("%d\n",sizeof(a[1])); //4 printf("%d\n",sizeof(&a)); //4 printf("%d\n",sizeof(&a+1));//4 printf("%d\n",sizeof(&a[0]));//4 printf("%d\n",sizeof(&a[0]+1)); //4 getchar(); return 0; }
char arr[]={'a',...,'f'};
#include<stdio.h> #include<string.h> int main() { char arr[] = {'a','b','c','d','e','f'}; printf("%d\n", sizeof(arr)); //6 printf("%d\n", sizeof(arr+0));//4 printf("%d\n", sizeof(*arr));//1 printf("%d\n", sizeof(arr[1]));//1 printf("%d\n", sizeof(&arr)); //4 printf("%d\n", sizeof(&arr+1));//4 printf("%d\n", sizeof(&arr[0]+1));//4 printf("%d\n", strlen(arr));//随机值 printf("%d\n", strlen(arr+0));//随机值 //printf("%d\n",strlen(*arr)); //printf("%d\n", strlen(arr[1])); printf("%d\n", strlen(&arr));//随机值 printf("%d\n", strlen(&arr+1));//随机值 printf("%d\n", strlen(&arr[0]+1)); //随机值 getchar(); return 0; }
char *p="123456"
#include<stdio.h> #include<string.h> int main() { char *p = "abcdef"; printf("%d\n", sizeof(p));//4 printf("%d\n", sizeof(p+1));//4 printf("%d\n", sizeof(*p)); //1 printf("%d\n", sizeof(p[0])); //1 printf("%d\n", sizeof(&p)); //4 printf("%d\n", sizeof(&p+1)); //4 printf("%d\n", sizeof(&p[0]+1)); //4 printf("%d\n", strlen(p)); //6 printf("%d\n", strlen(p+1));//5 //printf("%d\n", strlen(*p)); //printf("%d\n", strlen(p[0])); printf("%d\n", strlen(&p));//随机值 printf("%d\n", strlen(&p+1));//随机值 printf("%d\n", strlen(&p[0]+1));//5 getchar(); return 0; }
char p[]="abc123"
#include<stdio.h> #include<string.h> int main() { char p[] = "abcdef"; printf("%d\n", strlen(p)); //6 printf("%d\n", strlen(p+1));//5 //printf("%d\n", strlen(*p)); //printf("%d\n", strlen(p[0])); printf("%d\n", strlen(&p));//6 printf("%d\n", strlen(&p+1));//随机值 printf("%d\n", strlen(&p[0]+1));//5 getchar(); return 0; }
二维数组 int a[3][4]={0}
#include<stdio.h> #include<string.h> int main() { int a[3][4] = {0}; printf("%d\n",sizeof(a)); //48 printf("%d\n",sizeof(a[0][0]));//4; printf("%d\n",sizeof(a[0]));//16; printf("%d\n",sizeof(a[0]+1));//4 printf("%d\n",sizeof(a+1)); //4 printf("%d\n",sizeof(&a[0]+1));//4 printf("%d\n",sizeof(*a)); //16 printf("%d\n",sizeof(a[3])); //16 getchar(); return 0; }
数组只有两种情况下表示整个数组:
- sizeof()中放的是数组名表示整个数组
- 取地址&数组名代表整个数组
其他都表示数组首地址或数组地址。