#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;
}
基于b站鹏哥的C语言指针的一些试题真不错有兴趣可以看看是2020年第41个视频里面的
最新推荐文章于 2024-09-27 00:45:01 发布