本文主要是介绍C语言天花板——指针(进阶3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
篇接上文(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、
7、
8、
9、
10、
我们可以看到运行结果和我们分析的是一致的,所以对于数组名的引用,还是有很多坑的。
接下来我们换字符串数组以及strlen函数的例子:
#include <string.h>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之前出现的字符的个数
是不是很奇妙,接下来我们再来看最后一个例子:
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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!