sizeof与STRLEN(2)

最後のアクセス内容

int main()
{
//二维数组
int a[3][4] = {0};
printf("%d\n",sizeof(a));//3*4*4=48
printf("%d\n",sizeof(a[0][0]));//4
printf("%d\n",sizeof(a[0]));//16  a[0]第一行的数组名 sizeof(a[0])第一行的总大小,单位是字节
printf("%d\n",sizeof(a[0]+1));//4 第一行第二个元素地址 
printf("%d\n",sizeof(*(a[0]+1)));//4 第一行第二个元素
printf("%d\n",sizeof(a+1));//4 第二行的地址
printf("%d\n",sizeof(*(a+1)));//16 第二行的大小
printf("%d\n",sizeof(&a[0]+1));//4 第二行的地址
printf("%d\n",sizeof(*(&a[0]+1)));//16 第二行的大小
printf("%d\n",sizeof(*a));//16 第一行的大小 *a=*(a+0)=a[0]->16
printf("%d\n",sizeof(a[3]));//

char arr[] = "abcdef";//7个元素 6+1 "\0"
printf("%d\n", sizeof(arr));//7*1=7  7个元素 每个元素一个字节
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));//7
printf("%d\n", sizeof(&arr+1));//4
printf("%d\n", sizeof(&arr[0]+1));//4 第二个元素地址
 
printf("%d\n", strlen(arr));//6
printf("%d\n", strlen(arr+0));//6
printf("%d\n", strlen(*arr));//err 程序崩溃
printf("%d\n", strlen(arr[1]));//err
printf("%d\n", strlen(&arr));//6
printf("%d\n", strlen(&arr+1));//随机值
printf("%d\n", strlen(&arr[0]+1));//5
 
char *p = "abcdef";
printf("%d\n", sizeof(p));//4 指针变量大小 32位
printf("%d\n", sizeof(p+1));//sizeof(b) 4
printf("%d\n", sizeof(*p));//1
printf("%d\n", sizeof(p[0]));//1  *(p+0)
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));//err
printf("%d\n", strlen(p[0]));//err
printf("%d\n", strlen(&p));//随机值
printf("%d\n", strlen(&p+1));//随机值
printf("%d\n", strlen(&p[0]+1));//5
}

ここに画像を挿入説明

公開された37元の記事 ウォンの賞賛3 ビュー1110

おすすめ

転載: blog.csdn.net/weixin_43264873/article/details/102901816