c++中数组与指针是什么

  介绍

这篇文章将为大家详细讲解有关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++中数组与指针是什么