主题四 指针和数组(上)----22.数组基础

来源:互联网 发布:淘宝代理运营 编辑:程序博客网 时间:2024/06/02 01:04

数组

数组是相同类型的变量的有序集合。


Int a[5];

//代表一个包含5个int类型的数据

a代表数组的第一个元素的起始地址,每个元素都是int类型,

这20字节空间的名字为a,a[0],a[1]等都是a中的元素,而并非元素的名字,数组中的元素没有名字。

 

数组在一片连续的内存空间中存储元素

数组元素的个数可以显示或者隐式

Int a[5]={1,2};

Int b[]={1,2};

 

数组地址与数组名

数组名代表数组首元素的地址

数组的地址需要用取地址符&才能得到

首元素的地址值和数组的地址值相同

首元素的地址与数组的地址是两个概念

 

数组名的盲点

数组名可以看做一个常量指针,但是其本质上是两个概念

数组名“指向”的是内存中数组首元素的起始位置

在表达式中数组名只能作为右值使用

只有在以下场合中数组名不能看做常量指针

1.数组名作为sizeof操作符的参数

2.数组名作为&运算符的参数

 

C语言为什么不用这种方式复制数组?

Int a[5];

Int b[5];

A=b;   

 

经典错误再现:

定义为指针,声明为数组

#include<stdio.h>//another file//char* p=”Hello word!”;extern char p[];int main(){    printf(“%s\n”,p);    return 0;}//Output:乱码//数组p实际存储的是字符串”Hello word!”的地址,然后将其打印出来,肯定是错误的乱码//printf(“%s\n”,*((unsigned int *)p));

编译器处理指针和数组方式不同

    指针:一次寻址操作,再做读取执行

    数组:无寻址,直接读取执行

 

数组小结

数组是一片连续的内存空间

数组的地址和数组首元素的地址意义不同

数组名在大多数情况下被当成常量指针处理

数组名其实并不是指针,在外部声明不能混淆

概念的混淆是Bug的根源之一



阅读全文
0 0
原创粉丝点击