指针练习题-一维数组

171 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

基础知识

sizeof():计算的是变量/类型所占内存空间的大小
数组名:
1.sizeof(数组名)--此时数组名表示的是整个数组,计算的是整个数组的大小,单位是字节
2.&数组名-数组名表示的是整个数组,取出的是整个数组的地址
    &数组名+1:跳过整个数组
 除次之外,所以的数组名都是数组首元素地址!

注意:地址的大小可能为4,可能为8,分32位平台和64位平台

strlen:库函数,求字符串长度。 遇到\0停止计算
    
sizeof():操作符-单位是字节,求变量所占空间大小
    求类型创建的变量所占空间的大小,字符串中的\0也占用空间,也算

strlen()是根据传过来的地址向后求长度,由于不对字符串做修改,所以参数可以用const修饰


题目: 每一行代码分析:

int main()
{
	int a[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));//数组名a单独放在sizeof内部,数组名表示整个数组,计算的是整个数组的大小
	printf("%d\n", sizeof(a + 0));//a表示首元素的地址,a+0还是首元素的地址,地址的大小是4/8字节
	printf("%d\n", sizeof(*a));   //a表示首元素的地址,*a 就是首元素 ==> a[0] ,大小就是4
	//*a <==> *(a+0) <==> a[0]
	printf("%d\n", sizeof(a + 1));//a表示首元素的地址,a+1是第二个元素的地址,大小就是4/8
	printf("%d\n", sizeof(a[1])); //a[1] 就是第二个元素 - 4
	printf("%d\n", sizeof(&a));   //&a - 数组的地址 - 4/8 - int(*)[4]
	printf("%d\n", sizeof(*&a));  //*&a - &a是数组的地址,对数组的地址解引用拿到的是数组,所以大小时候16
	//相当于printf("%d\n", sizeof(a));//16

	printf("%d\n", sizeof(&a + 1));//4/8 &a是数组的地址,&a+1 是数组的地址+1,跳过整个数组,虽然跳过了数组,
	//还是地址  4/8
	printf("%d\n", sizeof(&a[0]));//4/8
	printf("%d\n", sizeof(&a[0] + 1));//第二个元素的地址 4/8
	return 0;
}