C语言学习第21篇---数组的本质剖析
【摘要】
数组是相同类型的变量的有序集合
图示:
数组的大小:
数组在一片连续的空间内存空间中存储元素
数组元素个数可以显示或隐式指定
实验1:数组的初始化实验
#include <stdio.h> int main(){ int a[5] = {1, 2}; int b[] = {1, 2...
数组是相同类型的变量的有序集合
图示:
数组的大小:
数组在一片连续的空间内存空间中存储元素
数组元素个数可以显示或隐式指定
实验1:数组的初始化实验
-
#include <stdio.h>
-
-
int main()
-
{
-
int a[5] = {1, 2};
-
int b[] = {1, 2};
-
-
printf("a[2] = %d\n", a[2]);
-
printf("a[3] = %d\n", a[3]);
-
printf("a[4] = %d\n", a[4]);
-
-
printf("sizeof(a) = %d\n", sizeof(a));
-
printf("sizeof(b) = %d\n", sizeof(b));
-
printf("count for a: %d\n", sizeof(a)/sizeof(int));
-
printf("count for b: %d\n", sizeof(b)/sizeof(int));
-
-
return 0;
-
}
数组地址与数组名
- 数组名代表数组首元素的地址
- 数组的地址需要取地址符&才能看到
- 数组首元素的地址 值和数组的地址值相同
- 数组首元素的地址与数组的地址是两个不同的概念
实验2:数组名和数组地址
-
#include <stdio.h>
-
-
int main()
-
{
-
int a[5] = { 0 };
-
-
printf("a = %p\n", a);
-
printf("&a = %p\n", &a);
-
printf("&a[0] = %p\n", &a[0]);
-
-
return 0;
-
}
数组的盲点:
数组名可以看做一个常量指针
数组名“指向"的是内存中数组首元素的起始位置
数组名不含数组的长度信息
在表达式数组名不能看做常量指针
- 数组名作为sizeof操作符的参数
- 数组名作为&运算符的参数
实例3:
-
#include <stdio.h>
-
-
int main()
-
{
-
int a[5] = {0};
-
int b[2];
-
int* p = NULL;
-
-
p = a;
-
-
printf("a = %p\n", a);
-
printf("p = %p\n", p);
-
printf("&p = %p\n", &p);
-
printf("sizeof(a) = %d\n", sizeof(a));
-
printf("sizeof(p) = %d\n", sizeof(p));
-
-
printf("\n");
-
-
p = b;
-
-
printf("b = %p\n", b);
-
printf("p = %p\n", p);
-
printf("&p = %p\n", &p);
-
printf("sizeof(b) = %d\n", sizeof(b));
-
printf("sizeof(p) = %d\n", sizeof(p));
-
-
b = a;
-
-
return 0;
-
}
小结:指针难就难在概念的不清晰
- 数组是一片连续的内存空间
- 数组的地址和数组首元素的地址意义不同
- 数组名在大多数情况下被当成常量指针的处理
- 数组名其实并不是指针,不能将其等同于指针
文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。
原文链接:allen5g.blog.csdn.net/article/details/80463008
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)