标题:指针类型匹配问题
只看楼主
ldliming
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-8-12
 问题点数:0 回复次数:15 
指针类型匹配问题
大家请看下面这个函数:
main()
{
int arr_add(int arr[],int n);
static int a[3][4]={1,2,3,4,5,3,45,55,6,33,62,88};
int *p,total;
p=a[0]; //如果此处改为p=&a[0][0]或者p=a这个函数的结果都是一样,但是其实质内容一样吗?还望高手指点迷津。谢!
total=arr_add(p,12);
printf("total=%d\n",total);
}
arr_add(int arr[],int n)
{
int i,sum=0;
for(i=0;i<n;i++)
sum=sum+arr[i];
return (sum);
}
搜索更多相关主题的帖子: 指针 类型 arr int sum 
2006-08-16 21:54
wuyufenjr
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2006-7-20
得分:0 

实质不一样的!书上讲得很清楚啦!p=&a[0][0]是把a[0][0]的地址赋值给指针变量p,而p=a是把二维数组的首地址赋值给指针变量p;p=a[0]是相当于把这个二维数组的第一行地址赋值给指针变量p;多维数组可以看成了由多个一维数组组成的。

2006-08-16 22:00
wuyufenjr
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2006-7-20
得分:0 

我是这么理解的!不知道是否对!请各位大虾指点!

2006-08-16 22:00
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 

您这样操作二维数组,也没什么错的,只不过一般不这样操作。
数组在内存中都是以一维的形式来存储的。所以您这样没错。
改为&a[0][0]是没错的,改为p=a就犯了指针类型不一致了,您在定义的时候把p定义成了一级指针。
而a是二维数组名,可看作是二级指针,所以如果编译通过,结果也没错,则是编译器自动把类型强制转换了,也就是p=a,实际上就是p=(int *)a。


对不礼貌的女生收钱......
2006-08-16 22:06
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 

p=a 类型不匹配,应该不能通过编译,如果可以的话告诉我你用什么编译器。
p=&a[0][0];可以,实质一样的,&a[0][0]是元素的地址,a[0]是行首地址,他们的地址和指针P的步长一样的。

2006-08-16 22:18
ldliming
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-8-12
得分:0 
   版主:您说一般不这样操作二维数组,那怎么操作?给我举个例子好吗?谢谢!还有,那个a不是代表行地址a[0]不是代表首地址(或者说列地址)吗?这样说对吗?
2006-08-16 22:18
ldliming
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-8-12
得分:0 
  回答5楼的大哥,我用的是TC 2.0,可以通过编译阿,结果也完全一样啊。我对天发誓,绝对是实话!呵呵。
2006-08-16 22:20
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
int array[3][4];
int add(int (*p)[4],int n)
{
for(;;)
for()
sum+=p[i][j];
return sum;
}

对不礼貌的女生收钱......
2006-08-16 22:22
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 

至于您那个说法,很模糊,我看不懂您的意思,明天再说吧,我下了。


对不礼貌的女生收钱......
2006-08-16 22:23
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 

TO楼主,我不是大哥,也是初学者,建议你看看我发的一张“玩转指针”帖子,自己编译一下就知道了。

2006-08-16 22:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-84400-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055982 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved