指针数组与数组指针

来源:互联网 发布:淘宝玩乐收藏类目在哪 编辑:程序博客网 时间:2024/04/30 10:45

 数组指针与指针数组的区别
int (*p)[10];
定义了一个数组指针,这个指针与一般的指针没有什么区别,仅仅是这个指针指向一个数组。这里我们把数组作为了基本的元素处理。也就是说,将整个数组作为一种类型,而数组名就是这个类型的一个具体变量。例如:
int a[10];
一个数组类型,形状就是这样:int [10];a就是新定义的一个变量。
int b[3];
一个数组类型,形状就是这样:int [3];b就是新定义的一个变量。
因为这两个类型形状不一样,因此是两个不同的类型,因此a,b就是不同类型的变量。这就好比int a和double b :a和b不一样。不知道大家是否已经对数组类型有了基本的印象?
那么把数组名作为该数组类型的一个具体变量,我们就可以定义指向这个变量的指针,即数组指针。
对于数组类型:int [10],我们可以定义一个指针,int (*p) [10].注意这里一定要加上小括弧。否则就会变成了指针数组。定义了指针之后,我们可以对该指针赋值,如p=&a;如果定义了一个二维数组,int c[3][10]。我们可以认为定义了一个一维的数组,这个数组有三个int[10]的元素。因此和一般的数组一样,我们可以将该数组名赋给指针,其实也就是第一个元素的地址付给指针。即: p=c;或者p=&c[0]。其余情况以此类推。
---------------------------------------------------------------
数组指针是指针类型,它指向一个数组,代表数组的首地址。
指针数组首先是一个数组,只不过这个数组的元素是指针而己。
---------------------------------------------------------------
下面的程序有错误嘛?为什么?
#include<iostream.h>
void main(){
   int *p=new int [10];
   int arr[10];
   int (*ptr)[10];
   ptr=p;
   ptr=arr;
   ptr=&arr;
   typedef int (*type)[10];
   type pa=&(new int[10]);
   int* pb;
   type pc=&(pb=new int[10]);
   type pd=(type)(new int[10]);
}
-------------------------------------------------------
ptr=&arr;
type pa=&(new int[10]);
type pc=&(pb=new int[10]);
窃以为此三句对。
---------------------------------------------------------------
你说:int a[90]; a是个变量,那么要分配内存,那么a有地址吗?&a???
---------------------------------------------------------------
数组指针是定义的一个指针,而指针所指的对象是一个数组,指针指向该数组的首单元的地址,它对数组的内部元素的属性不了解,只是规定了首单元的地址,通过它可以找到该数组。
     指针数组指的是一个数组,它其中的所有元素都是指针类型,这里所有指针都指向不同的地址,而所指地址的数据也不一定相同,但是必须属于同一数据类型。
     二者相差很多。
---------------------------------------------------------------
ptr=p;//将ptr指针指向p,错误!
   ptr=arr;//将ptr这个数组指针指向int arr[10]数组的首址,错误!
   ptr=&arr;//将ptr指向哪里?不清楚~~
   ptr应该是一个指向int型一维数组的首行才对!
   不知道我说道的对不对啊?
---------------------------------------------------------------
ptr=p; 数组指针与指针数概念浑淆
ptr=arr; 同上
type pa=&(new int[10]); 没见过
type pc=&(pb=new int[10]);   数组指针指针数组概念浑淆
---------------------------------------------------------------
指针指向类型不同的,说白了就是相邻的两个指针的之间的距离因为指针的类型不同而有所不一样的。
---------------------------------------------------------------
数组指针是指向数组的,
如: int a[3][3],(*p)[3];
     p=a;
这里(*p)[3]用于告诉编译系统,它是一个指针,指向一个长度为3的整型数组。这样在用指针访问其所指向的内存单元的时候就可以用*(*(p+i)+j)来表示a[i][j];
若:int a[3][3],*p;
     p=a;
就需用:*(p+3*i+j)来表示a[i][j].
指针数组是这样一种特殊的数组:它的每一个数组元素都是一个指针。
如:int *p[3];
*p[0],*p[1],*p[2]都是一个指针。

 

所谓指针数组吗,其实就可以把他看成一个结构提指针,只是他里面的元素都是相同的类型.例如:int (*p)[22];p就是指向一个由10个整型单元构成的数组的指针.p必须是指向由10个整型单元构成的数组,就如一个结构体指针必须指向与它相同类型的一个结构体一样

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子把褥子尿湿怎么办 小孩尿过的褥子怎么办 包包放着发霉了怎么办 被套盖久了发黄怎么办 小白鞋里面发霉怎么办 棉被淋了一点雨怎么办 苹果手机被拉进电话群怎么办 墙上的插座烧了怎么办 富士康早退4分钟怎么办 我老婆起泡疹腿剌痛睡不着了怎么办 oppo耳机孔坏了怎么办 魅族耳机口坏了怎么办 控制线的报验资料怎么办 人失踪报警派出所不管怎么办 铁板的货架久了怎么办 干镀锌让环保查了怎么办 水管软管生锈了拧不动怎么办 镀锌管会生锈吗.怎么办 冷镀锌钢管生锈了怎么办 卖了过期的东西怎么办 喝到了假的饮料怎么办 烧汤总是溢锅怎么办 脚踩垃圾桶坏了怎么办 连衣裙特别容易起褶怎么办 施肥过度烧根了怎么办 农作物施用尿素发生肥害怎么办? 水稻尿素施多了怎么办 花施肥施多了怎么办 玉米被化肥烧了怎么办 撒施复合肥没有充分融化怎么办 绿箩化肥施多了怎么办 辣椒化肥施多了怎么办? 化肥施多了烧苗怎么办 绿植施肥施多了怎么办 盆栽肥料放多了怎么办 三环复合肥怎么办啊 母猪下崽后不吃食怎么办 猪自配料料槽不下怎么办 美甲边缘起翘怎么办 猪粪流到鱼塘里鱼死了怎么办啊 在基本农田建有机肥厂怎么办