int (*a)[10]的问题如下 5
int(*a)[10]表示a是指向一个有10个整形数数组的指针。理解:把*a当作整体A则a指向A,而A又是A[10]的地址,则a是指向地址的,这个理解明显是错误的,哪里错...
int (*a)[10]表示a是指向一个有10个整形数数组的指针。理解:把*a当作整体A 则a指向A,而A又是A[10]的地址,则a是指向地址的,这个理解明显是错误的 ,哪里错了应该怎么理解?
网上的:
在有括号的定义中我们就把有括号中有指针的都删掉如
(int (*a)[10]=`=int () [10])由删掉的内容我们首先确定它是一个指针,再通过删掉后剩下的内容我们确定了这个指针指向了一个有10整型数的数组;
对于函数指针也一样;
(这个理解明显是对着答案说的呀,这是公认的版本) 展开
网上的:
在有括号的定义中我们就把有括号中有指针的都删掉如
(int (*a)[10]=`=int () [10])由删掉的内容我们首先确定它是一个指针,再通过删掉后剩下的内容我们确定了这个指针指向了一个有10整型数的数组;
对于函数指针也一样;
(这个理解明显是对着答案说的呀,这是公认的版本) 展开
1个回答
展开全部
int (*a)[10]表示a是指向一个有10个整形数数组的指针。
首先a是一个指针变量,定义后在内存中分配一个4个字节的内存空间(32位机上),用来存放指针变量。无论什么类型的指针变量,都是4个字节内存空间(32位机)。此时并不存在A[10]。把*a当作整体A 则a指向A,可以这么理解,但要注意并没有A。
如果定义了数组int A[10],并且将首地址存入了a中。那么用a中的地址访问内存时,是将以A为首地址的10个连续的整形空间作为整体访问的。如果整形数据为32位。那么a+1相当于a中的内容加320。
所以a不是指向地址的,a中的内容是地址。a是指向占用320个字节内存的数组的。
常用的方法
int (*a)[10];
int b[5][10]; //二维数组,5行10列
a=b; //a指向以b开始的内存单元
(如果b[0][0]为第0行第0列)a+1,则指向b数组的第1行。每加1,跳1行。*(a+1)+2,则指向b数组的第1行第2列。b[1][2]中的值则为*(*(a+1)+2)
这样方便二维数组的访问。
写了这么多,给个采纳吧!
首先a是一个指针变量,定义后在内存中分配一个4个字节的内存空间(32位机上),用来存放指针变量。无论什么类型的指针变量,都是4个字节内存空间(32位机)。此时并不存在A[10]。把*a当作整体A 则a指向A,可以这么理解,但要注意并没有A。
如果定义了数组int A[10],并且将首地址存入了a中。那么用a中的地址访问内存时,是将以A为首地址的10个连续的整形空间作为整体访问的。如果整形数据为32位。那么a+1相当于a中的内容加320。
所以a不是指向地址的,a中的内容是地址。a是指向占用320个字节内存的数组的。
常用的方法
int (*a)[10];
int b[5][10]; //二维数组,5行10列
a=b; //a指向以b开始的内存单元
(如果b[0][0]为第0行第0列)a+1,则指向b数组的第1行。每加1,跳1行。*(a+1)+2,则指向b数组的第1行第2列。b[1][2]中的值则为*(*(a+1)+2)
这样方便二维数组的访问。
写了这么多,给个采纳吧!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询