指针的相关运算,包括一维数组、二维数组、字符数组的sizeof、strlen运算

本文详细解析了C语言中一维数组、字符数组、指针及二维数组的sizeof和strlen运算符的使用方法,并通过具体实例展示了不同情况下这些运算符返回值的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一维数组

	int a[] = { 1, 2, 3, 4 };
	printf("%d\n", sizeof(a));//整个数组              4*4
	printf("%d\n", sizeof(a + 0));//首元素地址        4
	printf("%d\n", sizeof(*a));//首元素               4
	printf("%d\n", sizeof(a + 1));//第二个元素地址    4
	printf("%d\n", sizeof(a[1]));//第二个元素         4
	printf("%d\n", sizeof(&a));//数组地址             4
	printf("%d\n", sizeof(&a + 1));//下一个数组地址   4
	printf("%d\n", sizeof(&a[0]));//第一个元素地址    4
	printf("%d\n", sizeof(&a[0] + 1));//第二个元素地址4
	printf("%d\n", sizeof(*&a));//整个数组            4*4
字符数组

	char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
	printf("%d\n", sizeof(arr));//整个数组                 6*1
	printf("%d\n", sizeof(arr + 0));//首元素地址            4
	printf("%d\n", sizeof(*arr));//首元素                   1
	printf("%d\n", sizeof(arr[1]));//第二个元素             1
	printf("%d\n", sizeof(&arr));//首元素地址               4
	printf("%d\n", sizeof(&arr + 1));//下一个数组的地址     4
	printf("%d\n", sizeof(&arr[0] + 1));//第二个元素的地址  4


	char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
	printf("%d\n", strlen(arr));//随机值
	printf("%d\n", strlen(arr + 0));//随机值
	printf("%d\n", strlen(*arr));//97作为地址不可以访问
	printf("%d\n", strlen(arr[1]));//98作为地址不可以访问
	printf("%d\n", strlen(&arr));//随机值
	printf("%d\n", strlen(&arr + 1));//随机值
	printf("%d\n", strlen(&arr[0] + 1))//随机值
指针

        char *p = "abcdef";//p中只存a的地址
	printf("%d\n", sizeof(p));//字符指针,4个字节    4
	printf("%d\n", sizeof(p + 1));//b的地址          4
	printf("%d\n", sizeof(*p));//首元素              1
	printf("%d\n", sizeof(p[0]));//首元素            1
	printf("%d\n", sizeof(&p));//p的地址             4
	printf("%d\n", sizeof(&p + 1));//跳过整个字符串的地址   4
	printf("%d\n", sizeof(&p[0] + 1));//b的地址      4


	char *p = "abcdef";
	printf("%d\n", strlen(p));//6
	printf("%d\n", strlen(p + 1));//b~f   5
	printf("%d\n", strlen(*p));//错误
	printf("%d\n", strlen(p[0]));//错误
	printf("%d\n", strlen(&p));//随机值
	printf("%d\n", strlen(&p + 1));//随机值
	printf("%d\n", strlen(&p[0] + 1));//b~f   5

二维数组

	int a[3][4] = { 0 };
	printf("%d\n", sizeof(a));//整个数组          12*4
	printf("%d\n", sizeof(a[0][0]));//第一个元素   4
	printf("%d\n", sizeof(a[0]));//第一行元素      4*4
	printf("%d\n", sizeof(a[0] + 1));//第一行第二个元素  4
	printf("%d\n", sizeof(a + 1));//降维,第二行第一个元素地址  4
	printf("%d\n", sizeof(&a[0] + 1));//第二行地址      4
	printf("%d\n", sizeof(*a));//降维,第一行元素       4*4
	printf("%d\n", sizeof(a[3]));//降维                 16


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值