补充内容:C++语言中数组指针和指针数组彻底分析

原创 2002年06月18日 09:06:00

上一次我们主要说明数组,指针,指针数组,数组指针这几个很基本的概念,
不过有一点上一次我没有提及,那就是我们使用typedef定义指向数组指针
的数组,这个叫法是不是很拗口呀,不过我们看具体的程序就清楚了。

file://----------数组--------------
int a[2]={10,20};
int b[2]={30,40};
file://简单的指向两个元素数组的指针
int (*p2arr)[2]=&a;

file://---------注意这里的变化--------

file://这里我们声明简单的类型P2ARR.可以这样描述
file://P2ARR是一种用户自定义的类型。她的功能描述
file://是用来描述整数数组的,这个数组只能含有两个元素
typedef int (*P2ARR)[2];

P2ARR pp=&b;
pp=p2arr;//类型一致

file://这里我们定义指向指向数组指针的数组
P2ARR ap2a[2]={&a,&b};

file://如果我们采用下面的写法则是错误的,原因看下面分析
file://P2ARR ap2a[2]={a,b};//------错误写法-------

---------还有一点注意----------------
有人可以能会说,定义数阻指针的数组,下面这样的形式
好像也可以做到的。
int (*p2arr)[2][2];
咋一看,好像是的,但是仔细想想。原来上面是定义
一个指针,这个指针是指向二维数组的指针,还是
数组指针,而不是数组指针数组。这一点,应该很容易明白的。


上一次我讲到int []数组声明与int *类型在函数参数等方面转换的例子。
这里有一点补充的,我们实际上现在还是不清楚数组来C++编译器层面的
表示,也就是我们不知道编译器使用什么样的结构形式来表示数组的。所以
上面这些转换只能转换而已,我们不能有更多的假设。

----------我的想象,我的猜想--------
我是这样相像的,C++采用类似JAVA中Array类的形式来管理数组。当然其中
有许多c++语言的特征,比如operator *,operator ->等重载,但是这些类型
转换运算符的使用,只有编译器认为需要的时候才会调用的,因为数组表示本身
就是编译器内部结构的嘛。目前到这里,我们也只能认为在函数参数使用等情况
下才发生int []到int *的转换。

看下面的程序。
#include <iostream>
using namespace std;
void change(int pa[],int index)
{
 pa[index]=200;
}
int main()
{
 int a[3]={1,2,3};
 change(a,0);//这里编译器已经把 int a[3],转换成int *指针传给了函数
             file://这个是语言实现细节,请参考《the c++ programming language》
 cout<<a[0];
 return 0;
}

但是我们上面的标注行
//P2ARR ap2a[2]={a,b};//------错误写法-------

则是应该这样理解:数组就是数组,指针就是指针,虽然编译器需要的时候
会进行一定的转换,但是我们不能认为那些转换是“想当然“的。
上面这一行,编译器就没有为我们进行类型转换的,所以我们要自己动手了。

//P2ARR ap2a[2]={&a,&b};//------正确写法-------

上面这些文字,主要一点就是说明了,有些行为是编译器完成的,而且还有一些
诡秘。但是我们要知道编译器做了那些,那些是要完成自己做的。重要的一点,
就是我们学会如何去简单使用typedef定义类型.

关于C语言中的数组指针、指针数组以及二级指针

概念解释数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针;在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。数组指针指向的是数组中的一个具体元素,而不是整个数组,所以...
  • u014265347
  • u014265347
  • 2017年02月05日 19:14
  • 2975

c语言结构体数组指针

#include #define N 3 struct student { long int num; char name[20]; float score[3]; float a...
  • zhangxxxww
  • zhangxxxww
  • 2013年03月16日 23:10
  • 7610

C++数组指针与指针数组

最近看到数组指针和指针数组那一块有点头疼,感觉明明都差不多的为什么一个叫数组指针,一个叫指针数组呢? 首先先理解什么叫数组指针,什么叫指针数组,既然名字不同,那么肯定意义也是不一样的咯~ ...
  • qq_36730190
  • qq_36730190
  • 2017年03月18日 12:53
  • 93

C++指针数组与数组指针的比较

// test1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "iostream" using namespace std; /** ...
  • d06110902002
  • d06110902002
  • 2016年05月23日 18:06
  • 314

C++语言中数组指针和指针数组彻底分析(系列一)

近来在论坛中机场经常看到有关数组指针和指针数组的讨论。这个是学习c++等语言中不可少的步骤,不过向来指针的东西就是很有用但是也是很难用的东西,所以学习起来也不是很容易了。近来本人也没有什么项目可以做的...
  • zosatapo
  • zosatapo
  • 2002年06月16日 12:43
  • 1713

c/c++(疑4) 指针数组和数组指针之间关系

指针数组和数组指针概述(数组指针(指向数组的指针)与指针数组(存放指针的数组)) 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。 数...
  • u010236550
  • u010236550
  • 2015年05月08日 11:49
  • 2060

C++语言中数组指针和指针数组彻底分析

近来在论坛中机场经常看到有关数组指针和指针数组的讨论。这个是学习c++等语言中不可少的步骤,不过向来指针的东西就是很有用但是也是...
  • elfbobo
  • elfbobo
  • 2007年08月31日 13:54
  • 446

C++语言中数组指针和指针数组彻底分析(系列一)

作者:zosatapo 时间:2001-10-17 10:21 出处:互联网 责编:chinaitpower ...
  • lemontr26
  • lemontr26
  • 2008年02月22日 23:13
  • 144

C++对象指针数组与堆中对象数组

#include using namespace std; /*堆中对象数组、对象指针数组*/ class stu { public: void set(int x){i = x + 6;} i...
  • u010738823
  • u010738823
  • 2016年05月06日 11:15
  • 1785

指针数组&数组指针的分配内存及函数参数 C语言版

最近写代码总是被基础知识卡住,十分耽误时间,今天又卡住了。所以下定决心一定要弄清楚这个问题,然后不好的是网上的资料总是解决的并不清楚,总是在纠结什么是指针数组什么是数组指针,看了《C缺陷和陷阱》也没有...
  • WSRspirit
  • WSRspirit
  • 2016年04月29日 20:20
  • 3163
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:补充内容:C++语言中数组指针和指针数组彻底分析
举报原因:
原因补充:

(最多只允许输入30个字)