C语言指针的简单应用

C语言指针的简单应用

int main()

{

int a[] = { 1,2,3,4 };//sizeof计算

printf("%d\n", sizeof(a));//sizeof(a)代表所用元素的大小,为4*4个字节

printf("%d\n", sizeof(a + 0));//a+0代表受元素的大小,为4个字节

printf("%d\n", sizeof(*a));//*a代表首元素,为4个字节

printf("%d\n", sizeof(a + 1));//a+1代表第二个元素的大小,为4个字节

printf("%d\n", sizeof(a[1]));//a[1]代表一个元素的大小,为4个字节

printf("%d\n", sizeof(&a));//&a计算的是地址的大小,32位平台为4个大小,64位平台为8个大小

printf("%d\n", sizeof(*&a));//&a为整个数组的地址,*&a为解引用之后的元素大小,为16个字节

printf("%d\n", sizeof(&a + 1));//&a+1代表地址的大小,为4或8个字节

printf("%d\n", sizeof(&a[0]));//&a[0]代表地址的大小,为4或8个字节

printf("%d\n", sizeof(&a[0] + 1));//&a[0] + 1代表地址的大小,为4或8个字节

return 0;

}

int main()

{

char arr[] = { 'a','b','c','d','e','f' };

printf("%d\n", sizeof(arr));//arr代表整个数组的大小,为1*6个字节

printf("%d\n", sizeof(arr + 0));//arr+0代表首元素地址的的大小,为4或8个字节

printf("%d\n", sizeof(*arr));//*arr代表首元素的大小,为1个字节

printf("%d\n", sizeof(arr[1]));//arr[1]代表第二个元素的大小,为一个字节

printf("%d\n", sizeof(&arr));//&arr代表地址,为4或8个字节

printf("%d\n", sizeof(&arr + 1));//&arr+1代表地址,为4或8个字节

printf("%d\n", sizeof(&arr[0] + 1));//&arr[0]+1代表地址,为4或8个字节

printf("%d\n", strlen(arr));//strlen为计算字符串长度的,以'\0'为结束标志,arr数组中没有'\0',无法计算大小

printf("%d\n", strlen(arr + 0));//strlen为计算字符串长度的,以'\0'为结束标志,arr数组中没有'\0',无法计算大小

printf("%d\n", strlen(*arr)); //strlen为计算字符串长度的,以'\0'为结束标志,arr数组中没有'\0',无法计算大小

printf("%d\n", strlen(arr[1]));//strlen为计算字符串长度的,以'\0'为结束标志,arr数组中没有'\0',无法计算大小

printf("%d\n", strlen(&arr));//strlen为计算字符串长度的,不能计算地址的大小

printf("%d\n", strlen(&arr +1));//strlen为计算字符串长度的,不能计算地址的大小

printf("%d\n", strlen(&arr[0]+ 1));//strlen为计算字符串长度的,不能计算地址的大小

return 0;

}

int main()

{

char arr[] = "abcdef";

printf("%d\n", sizeof(arr));//arr数组中有6个元素加一个结尾的'\0',一共有7个元素,为sizeof(arr)的大小为7个字节

printf("%d\n", sizeof(arr + 0));//arr+0代表首元素地址的的大小,为4或8个字节

printf("%d\n", sizeof(*arr));//*a为数组arr的首元素的大小,为1个字节

printf("%d\n", sizeof(arr[1]));//arr[1]为第二个元素的大小,为1个字节

printf("%d\n", sizeof(&arr));//&arr代表地址,为4或8个字节

printf("%d\n", sizeof(&arr + 1));//&arr+1代表地址,为4或8个字节

printf("%d\n", sizeof(&arr[0] + 1));//&arr[0]+1代表地址,为4或8个字节

printf("%d\n", strlen(arr));//arr后有'\0',所以strlen(arr)的长度为6

printf("%d\n", strlen(arr + 0));//strlen(arr+0)是从第一个元素开始的,所以长度为6

printf("%d\n", strlen(*arr));//*arr代表首元素,无法计算

printf("%d\n", strlen(arr[1]));//arr[1]为首元素,无法计算

printf("%d\n",strlen(&arr));;//strlen是计算字符串长度的,不能计算地址的大小

printf("%d\n", strlen(&arr +1));//strlen是计算字符串长度的,不能计算地址的大小

printf("%d\n", strlen(&arr[0]+ 1));//strlen是计算字符串长度的,不能计算地址的大小

return 0;

}

int main()

{

char* p = "abcdef";

printf("%d\n", sizeof(p));//p的类型为char*,为指针数组,所以p为地址,为4或8个字节

printf("%d\n", sizeof(p + 1));//p的类型为char*,为指针数组,所以p为地址,为4或8个字节

printf("%d\n", sizeof(*p));//*p代表首元素的大小,为一个字节

printf("%d\n", sizeof(p[0]));//p[0]也代表首元素的大小,为一个字节

printf("%d\n", sizeof(&p));//&p代表地址,为4或8个字节

printf("%d\n", sizeof(&p + 1)); //&p+1代表地址,为4或8个字节

printf("%d\n", sizeof(&p[0] + 1));//&p[0] + 1代表地址,为4或8个字节

printf("%d\n", strlen(p));//p为char*类型的指针,代表p中的元素个数,为6个

printf("%d\n", strlen(p + 1));//p+1代表第二个元素的指针,所以为5

printf("%d\n", strlen(*p));//*p为地址,无法计算

printf("%d\n", strlen(p[0]));//p[0]为地址,无法计算

printf("%d\n", strlen(&p));//&p为地址,无法计算

printf("%d\n", strlen(&p +1));//&p + 1为地址,无法计算

printf("%d\n", strlen(&p[0] +1));//&p[0] + 1为地址,无法计算

return 0;

}

总结:

数组名的意义:

1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。

2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。

3. 除此之外所有的数组名都表示首元素的地址。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

函数指针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值