【C语言】指针的一些易错点

指针

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

	printf("%d\n",sizeof(arr));//arr为数组名,且单独在sizeof内部,计算数组总大小,单位为字节 - 6
	printf("%d\n",sizeof(arr + 0));//arr为数组名,但并非单独在sizeof内部,arr + 0是首元素地址,单位为字节 - 4/8
    printf("%d\n",sizeof(*arr));//计算首元素大小,1字节
    printf("%d\n",sizeof(arr[1]));//第二个元素大小,1字节
    printf("%d\n",sizeof(&arr));//求地址大小,- 4/8
    printf("%d\n",sizeof(&arr + 1));//&arr为数组地址,&arr + 1跳过整个数组,指向'f'后边,但本质的还是地址 - 4/8
    printf("%d\n",sizeof(&arr[0] + 1));//是'b'的地址 - 4/8
    
    printf("%d\n",strlen(arr))//随机值,因为strlen计算的是字符串中\0之前出现字符的个数,没看到\0会一直找
    printf("%d\n",strlen(*arr))//*arr是首元素 - 'a' - 97,strlen会把'a'的ASCLL码值 97 当作地址,err报错
    
	return 0;
}
#include<string.h>

int main()
{
	char arr[] = "abcdef";
    
    printf("%d\n",sizeof(arr));// a b c d e f \0 一共7个字节
    printf("%d\n",sizeof(*arr));//为1
    printf("%d\n",sizeof(&arr));// 4/8
    printf("%d\n",sizeof(&arr + 1));// 4/8
    
    printf("%d\n",strlen(arr));// a b c d e f \0 ,到\0为止, - 6
    printf("%d\n",strlen(&arr + 1));//随机值
    printf("%d\n",strlen(&arr[0] + 1));// - 5
    
	return 0;
}
int main()
{
	const char* p = "abcdef";
    
    printf("%d\n",sizeof(p));// - 4/8
    printf("%d\n",sizeof(p + 1));//指向 'b'的地址,- 4/8
    printf("%d\n",sizeof(*p));//- 1
    printf("%d\n",sizeof(p[0]));//p[0]--> *(p + 0), *p == *(p + 0) == p[0], - 4/8
    
    printf("%d\n",strlen(&p));// char* *p = &p
    printf("%d\n",strlen(&p + 1));// char* *p = &p, &p+1跳过一个char*
    
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值