c语言中的数组和指针的区别

Python010

c语言中的数组和指针的区别,第1张

C语言中,数组的名称等价于数组的首地址

当然可以利用指针开辟动态空间,使用方式与数组在形式上相同的,

但是他们有一个本质的区别,数组名相当于一个地址常数,而指针是一个以地址为内容的变量。

指针与数组的关系可以参考下面的网页:

http://zhidao.baidu.com/question/341950481.html

数组和指针的区别:

数组名确实表示指向数组首地址的指针,但这个指针很特别,它的值(指针的值指的是指针所指的地址)不能被改写,能改写的仅仅是其指向的内容,换句话说,数组名只能指向数组的首地址,如果有数组char

a[]那么如果出现a

=

a+1这是编译都通不过的错误。而对于一个普通的指针是可以的,再比如有数组char

a[]那么再定义一个char

*p

=

a然后再用p

=

p+1是合法的,这表示让指针p指向&a[1]。

它们的第二个区别是:每当用到数组名这个指针的时候,系统都会传入数组的信息,而普通的指针只是一个4字节的整数,例如:

char a[5]

char *p = a//指针a和指针p都指向数组a的首地址

cout <<sizeof (a) <<"##" <<sizeof (p) <<endl这时的运行结果是“5##4”

首先第一点,非常重要的一点:指针和数组是不同的两个类型!

我们从可以从C语言标准文档中得知:

ISO/IEC 9899:1999 - programing language c

6.2.5 Types

20 .

这说明了什么是数组类型

同样在20 .

说明了什么是指针类型。

在了解了两种类型的基础上,我们了解数组和指针的区别:

数组是一组相同类型对象的集合,指针是对一个对象的引用。

它们在使用中表现出了一定的相同点,但不同点也是很多的:

1,数组直接储存对象,指针则是指向一个对象。

2,数组名不能被赋值,指针变量能。

3,sizeof一个数组,得到数组的长度(字节单位),sizeof一个指针,相当于sizeof(void*)。(注意,不同目标平台指针长度可能不同,所以sizeof(void*)是最准确的回答)

4,(可能是考试内容,对于正确性就呵呵)指针是间接访问,数组是直接访问。

如果你对C语言有深入学习的想法,务必去了解一下C语言的ISO标准。