这篇文章将为大家详细讲解有关c++中数组与指针是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
数组大小(元素个数)一般在编译时决定,也有少部分编译器可以运行时动态决定数组大小,比如icpc(英特尔c++编译器)。
<强> 1.1数组名的意义强>
数组名的本质是一个文字常量,代表数组第一个元素的地址和数组的首地址。数组名本身不是一个变量,不可以寻址,且不允许为数组名赋值。假设定义数组:
int [10],
那么再定义一个引用:
int *, r=,
这是错误的写法,因为变量一个是一个文字常量,不可寻址。如果要建立数组一的引用,应该这样定义:
int *常量,r=,
此时,现在数据区开辟一个无名临时变量,将数组一代表的地址常量拷贝到该变量中,再将常引用r与此变量进行绑定。此外,定义一个数组,则,,[0],A + 0是等价的。
在sizeof()运算中,数组名代表的是全体数组元素,而不是某个单个元素,例如,定义int[5],生成Win32的程序,sizeof (A)就等于sizeof (int)=5 * 5 * 4=20。示例程序如下。
# include & lt; iostream> 使用名称空间性病; int main () { int [4]={1, 2, 3, 4}; int B [4]={5、6、7、8}; int(和rA)[4]=一个;//建立数组一的引用 cout<& lt;“答:“& lt; & lt; A<& lt; endl; cout<& lt;“,答:“& lt; & lt;, A<& lt; endl; cout<& lt;“+ 1:“& lt; & lt; + 1 & lt; & lt; endl; cout<& lt;“和+ 1:“& lt; & lt;, + 1 & lt; & lt; endl; cout<& lt;“B:“& lt; & lt; B<& lt; endl; cout<& lt;“rA:“& lt; & lt; rA<& lt; endl; cout<& lt;“和rA:“& lt; & lt;, rA<& lt; endl; }
运行结果:
: 0013 f76c
引用>
,答:0013 f76c
+ 1:0013F770
, A + 1:0013F77C
B: 0013 f754
rA: 0013 f76c
, rA: 0013 f76c阅读以上程序,注意如下几点。
(1)与和一个的结果在数值上是一样的,但是一个与和一个的数据类型却不同。的类型是int[4],和一个的类型则是int(*)[4]。它们在概念上是不一样的,这就直接导致+ 1与及一个+ 1的结果完全不一样。
(2)为变量建立引用的语法格式是type&ref,因为数组一的类型是int[4],因此为一个建立引用的是int(及rA) [4]=,
<强> 1.2数组的初始化强>
定义数组的时候,为数组元素赋初值,叫作数组的初始化。可以为一维数组指定初值,也可以为多维数组指定初值。例如。
int (* p) [5];//指针p的类型是int(*)[5],指针所指向的数据类型是int [5] int * p [5];//p是有5个分量的指针数组,每个分量的类型都是int *(指向int的指针) int * * p;//指针p的类型是int * *, p指向的类型是int *, p是指向指针的指针<强> 2.3指针的初始化强>
定义指针变量之后,指针变量的值一般是随机值,这样的值不是合法访问的地址。指针变量值的合法化途径通常有两个,
一是显示置空,二是让指针指向一个已经存在的变量,三是为指针动态申请内存空间。如下://显示置空 int * p=零;//将指针指向某个变量 int我; int * p=,我;//动态申请内存空间 int * p=new int [10];c++中数组与指针是什么