篇接上文(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,它所指向的是一个字符串,那么又会发生怎样奇妙的火花呢?
相信大家经过这次的学习一定可以对指针又不一样的理解🎖️🎖️🎖️