C语言 有一个小小的疑问 希望大家 帮忙解答一下

[复制链接]
查看11 | 回复2 | 2011-2-19 08:00:18 | 显示全部楼层 |阅读模式
#includestdio.h
#define N 4
void min(int (*a)[N],int m)
{

int value,i,j;

for(i=0;im;i)

{

value=*(*(a i));

for(j=0;jN;j)

if(*(*(a i) j)value)

value=*(*(a i) j);

printf(\\\"line %d;the min number is %d\\\\n\\\",i,value);

}
}
main()
{

int a[3][N],i,j;

int (*p)[N];

p=

printf(\\\"please input;\\\\n\\\");

for(i=0;i3;i)

for(j=0;jN;j)

scanf(\\\"%d\\\",

min(p,3);
getch();
}

请问第7,9,10行中的“*(*(a i))” 为什么不能改成 *(a i) 呢?
不都是取地址吗? 自学者 很多不懂的
回复

使用道具 举报

千问 | 2011-2-19 08:00:18 | 显示全部楼层
<pre id=\\\"best-answer-content\\\">我来详细告诉你,int (*a)[n];这个a被说明为一个指向2维数组的指针,这个不用解释吧!但a不是指针的指针,a其实是指向一个“一维数组”,因为无论是一维数组还是多维数组,元素都是依此排列。所不同的是C编译器对他们的解释。看下面的程序
int *b,(*a)[5],c[2][5];
a=c;
b=c;
a[1][3]==c[1][3]==*(b 1*5 3)==*(*(a 1) 3)
这4者等价,看起来好像a是指针的指针需要2个*来取得最终内容,其实*(*(a 1) 3)中的*(a 1)会被C解释为a 1*5,*(*(a 1) 3)就解释成了*(a 1*5 3);
你写的*(a i)为第i列的首地址,是地址
而程序里面是取内容
一楼的回答者进入了误区,我以前也被迷惑了很久。
回复

使用道具 举报

千问 | 2011-2-19 08:00:18 | 显示全部楼层
<p>

<pre class=\\\"answer-content\\\">不能,在以上程序中,a是二维数组名,是指向指针的指针类型,
简单点:“*(*(a i))” 相当于*(*(a i) 0),也就是a[0],而*(a i)是指第i行,指的是一行,不是一个,“*(a i) 0”指的是第i行的首地址,是一个地址,所以两者类型和含义都不同,好好看下书上关于指针与二维数组的关系那部分知识就明白了,呵呵 ,希望你能看懂!!!

</p>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行