C语言学习记录14

    今天在做练习题0.0.......

    int a[] = { 1,2,3,4 };
    printf("%d\n", sizeof(a));//sizeof(数组名)-计算的是数组总大小单位是字节-16
    printf("%d\n", sizeof(a+0));//4/8数组名表示首元素地址,a+0还是首元素地址 地址大小是4/8字节
    printf("%d\n", sizeof(*a));//4 数组名表示首元素地址,*a就是首元素,int形占4个字节
    printf("%d\n", sizeof(a+1));//4/8同2  第二个元素地址
    printf("%d\n", sizeof(a[1]));//4 第二个元素大小
    printf("%d\n", sizeof(&a));//4/8  &a取出的是数组地址,地址大小就是4/8字节
    printf("%d\n", sizeof(*&a));//16  &a数组的地址  数组的地址解引用访问的是数组,sizeof计算的是数组大小
    printf("%d\n", sizeof(&a+1));//4/8   &a是数组的地址,&a+1虽然地址跳过整个数组,但还是地址
    printf("%d\n", sizeof(&a[0]));//4/8第一个元素的地址
    printf("%d\n", sizeof(&a[0]+1));//4/8 第二个元素的地址

char arr[] = { 'a','b','c','d','e','f' };
    printf("%d\n", sizeof(arr));//6   sizeof计算的是数组大小,
    printf("%d\n", sizeof(arr+0));//4/8 数组名表示首元素地址,a+0还是首元素地址 地址大小是4/8字节
    printf("%d\n", sizeof(*arr));//1   爱人认识首元素地址  *arr就是首元素,char形字符大小1
    printf("%d\n", sizeof(arr[1]));//1    第二个元素大小
    printf("%d\n", sizeof(&arr));//4/8, 数组地址
    printf("%d\n", sizeof(&arr+1));//4/8   &a是数组的地址,&a+1虽然地址跳过整个数组,但还是地址
    printf("%d\n", sizeof(&arr[0]+1));//4/8  第二个元素的地址


    printf("%d\n", strlen(arr));//随机值
    printf("%d\n", strlen(arr+0));//随机值  与第一个等价
    printf("%d\n", strlen(*arr));//err
    printf("%d\n", strlen(arr[1]));//err
    printf("%d\n", strlen(&arr));//随机值
    printf("%d\n", strlen(&arr+1));//随机值-6
    printf("%d\n", strlen(&arr[0]+1));//随机值-1

char arr[] = "abcdef";
    printf("%d\n", sizeof(arr));//7  数组的大小含有\0
    printf("%d\n", sizeof(arr+0));//4/8 首地址的大小
    printf("%d\n", sizeof(*arr));//1 *arr是首元素,首元素大小
    printf("%d\n", sizeof(arr[1]));//1   计算的是第二个元素的大小
    printf("%d\n", sizeof(&arr));//4/8  地址的大小
    printf("%d\n", sizeof(&arr+1));//4/8  地址的大小
    printf("%d\n", sizeof(&arr[0]+1));//4/8  大二哥第二个元素的地址的大小

    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    数组指针  char(*p)[7}=&arr
    printf("%d\n", strlen(&arr + 1));//随机值   
    printf("%d\n", strlen(&arr[0] + 1));//5  


    char *p = "abcdef";//p存放的是a的地址
    printf("%d\n", sizeof(p));//4/8  计算指针变量p的大小
    printf("%d\n", sizeof(p + 1));//4/8   p+1字符b的地址大小
    printf("%d\n", sizeof(*p));//1  *p字符串的第一个字符
    printf("%d\n", sizeof(p[0]));//1   p[0] == *(p+0) =='a'
    printf("%d\n", sizeof(&p));//4/8
    printf("%d\n", sizeof(&p + 1));//4/8
    printf("%d\n", sizeof(&p[0] + 1));//4/8

    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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值