当然可以利用指针开辟动态空间,使用方式与数组在形式上相同的,
但是他们有一个本质的区别,数组名相当于一个地址常数,而指针是一个以地址为内容的变量。
指针与数组的关系可以参考下面的网页:
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标准。