基于b站鹏哥的C语言指针的一些试题真不错有兴趣可以看看是2020年第41个视频里面的

#include<stdio.h>
#include<string.h> 
//鹏哥指针讲解40
int main()
{
    //数组名是首元素的地址
    //1.sizeof(数组名)-数组名表示整个数组
    //2.&数组名 -数组名表示整个数组
    //一维数组
   /* int a[]={1,2,3,4};
    printf("%d\n",sizeof(a));//sizeof(数组名)-计算的是数组总大小-单位是字节-16
    printf("%d\n",sizeof(a + 8));//4/8 -数组名这里表示首元素的值,a+8 还是首元素地址,地址的大小就是4/8个字节
    printf("%d\n",sizeof(*a)); //4 -数组名表示首元素地址,*a就是首元素,sizeof(*a)就是4
    printf("%d\n",sizeof(a + 1));//4/8 -数组名这里表示收元素的值,a+1 第2个元素的地址,地址的大小就是4/8个字节
    printf("%d\n",sizeof(a[1]));//4-第2个元素的大小
    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&a是数组的地址,&a+1虽然地址跳过整个数组,但还是地址,所以是4/8个字节
    printf("%d\n",sizeof(&a[0]));//4/8&a[0]第一个地址 
    printf("%d\n",sizeof(&a[0]+1));//4/8第二个元素地址 */
    //2
    /*
    char arr[]="abcdef";
    printf("%d\n",sizeof(arr));//sizeof(arr)计算的数组的大小,单位是字节:7
    printf("%d\n",sizeof(arr +0));//4/8 计算的是地址的大小-arr + 0是首元素的地址
    printf("%d\n",sizeof(*arr)); //1 *arr 是首元素,sizeof(*arr)计算首元素的大小
    printf("%d\n",sizeof(arr[1]));//1 arr[1]是第二个元素,sizeof(arr[1])计算的是第二个元素的大小
    printf("%d\n",sizeof(&arr)); //4/8 &arr虽然是数组的地址,但也是地址,所以是4/8个字节
    printf("%d\n",sizeof(&arr +1));//4/8 &arr+1是跳过整个数组后的地址,但也是地址
    printf("%d\n",sizeof(&arr[0]+ 1));//4/8 &arr[0]+1 第二个元素的地址
    
    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数组的地址-数组指针 char(*p)[7]= &arr;
    printf("%d\n",strlen(&arr));//6 &arr -
    printf("%d\n",strlen(&arr +1));//随机值
    printf("%lu\n", strlen(&arr[0] + 1));//5*/
    //3
   /* char arr[]={'a','b','c','d','e','f'};
    printf("%d\n",strlen(arr));//随机 
    printf("%d\n",strlen(arr+0));//随机 
    //printf("%d\n",strlen(*arr));//错误因为&arr找到的是字符a的地址a的ascll是97 
    //printf("%d\n",strlen(arr[1]));//同上 
    //编译器问题 
    printf("%d\n",strlen(&arr)); 
    printf("%d\n",strlen(&arr+1));
    printf("%d\n",strlen(&arr[0]+1));*/
    //4
    /*
    char*p="abcdef";
    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 就是字符串的第一个字符 -'a'p[0]==*(p+0)== 'a'
    printf("%d\n",sizeof(p[0]));//1 int arr[10];arr[0]==*(arr+0)
    printf("%d\n",sizeof(&p));//4
    printf("%d\n",sizeof(&p +1));//4
    printf("%d\n",sizeof(&p[0]+ 1));//4/
    */
    //5
    char* p="abcdef";
    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
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值