C语言天花板——指针(进阶3)

C语言天花板——指针(进阶3)_第1张图片 

篇接上文(http://t.csdnimg.cn/Tl42h),今天我们来讲一些有趣的关于指针的问题

首先我们来看个代码:

int main()
{
	//一维数组
	int a[] = { 1,2,3,4 };//4个元素,每个元素使int类型(4个字节)

	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(a + 0));
	printf("%d\n", sizeof(*a));
	printf("%d\n", sizeof(a + 1));
	printf("%d\n", sizeof(a[1]));
	printf("%d\n", sizeof(&a));
	printf("%d\n", sizeof(*&a));
	printf("%d\n", sizeof(&a + 1));
	printf("%d\n", sizeof(&a[0]));
	printf("%d\n", sizeof(&a[0] + 1));
	return 0;
}

我们知道sizeof函数是计算数组的大小的,所以我们这的输出值都是什么呢?

首先我们要明白:

 1、

2、

3、

4、 

5、 

6、C语言天花板——指针(进阶3)_第2张图片 

7、

C语言天花板——指针(进阶3)_第3张图片

8、 

9、

10、

 

 

C语言天花板——指针(进阶3)_第4张图片

我们可以看到运行结果和我们分析的是一致的,所以对于数组名的引用,还是有很多坑的。

接下来我们换字符串数组以及strlen函数的例子: 

#include 

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

	printf("%d\n", strlen(arr));
	printf("%d\n", strlen(arr + 0));
	//printf("%d\n", strlen(*arr));
	printf("%d\n", strlen(&arr));
	printf("%d\n", strlen(&arr + 1));
	printf("%d\n", strlen(&arr[0] + 1));


	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(arr + 0));
	printf("%d\n", sizeof(*arr));
	printf("%d\n", sizeof(arr[1]));
	printf("%d\n", sizeof(&arr));
	printf("%d\n", sizeof(&arr + 1));
	printf("%d\n", sizeof(&arr[0] + 1));

	return 0;
}

 

先介绍一下strlen函数: 

strlen 求字符串长度
统计的是在字符串中\0之前出现的字符的个数

 

C语言天花板——指针(进阶3)_第5张图片

C语言天花板——指针(进阶3)_第6张图片 

是不是很奇妙,接下来我们再来看最后一个例子:

int main()
{
	char* p = "abcdef";

	printf("%d\n", strlen(p));
	printf("%d\n", strlen(p + 1));
	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));
	return 0;
}

这次我们得主角是一个指针P,它所指向的是一个字符串,那么又会发生怎样奇妙的火花呢?

C语言天花板——指针(进阶3)_第7张图片 

相信大家经过这次的学习一定可以对指针又不一样的理解️️️ 

 

 

 

你可能感兴趣的:(c语言,开发语言,基础能力)