返回信息流#include <stdio.h>
void
fun(const int **a)
{
printf("%d", a[0][0]);
}
int main(void)
{
int a[2][2] = {1, 2, 3, 4};
fun(a);
return 0;
}
int** 和int[][]不能等同吗?
报内存错误,请教各位大牛
这是一条镜像帖。来源:北邮人论坛 / cpp / #14935同步于 2008/10/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[求助]二维指针参数传递错误
crossJ
2008/10/29镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
静态的二维数组应该就是相当于一维数组吧,能用**p访问么,
你把参数改成const int *a,传值的时候传fun(a[0]),或者fun(*a)试试
#include <stdio.h>
#include <iostream.h>
#include <typeinfo.h>
void
fun(const int *a)
{
printf("%d\n", a[0]);
}
fun1(const int **a)
{
printf("%d\n", a[0][0]);
}
int main(void)
{
int a[2][2] = {1, 2, 3, 4};
fun(a[0]);
fun1(a);
return 0;
}
fun正常,fun1报错,为啥呢?
首先,先看下这几个函数声明
fun(const int **a)这个函数表示a是一个指针
fun(const int *a) 同上
fun(const int a[][2]] ) 这个是个数组
fun(const int (*a)[2] ) 同上
然后我们在考虑下这个函数里面怎么用(说明下指针是不可能转换成数组的):
如果是指针不管是指针还是指针的指针,传进来的是二维数组的首地址
所以说如果你用a[0][0](相当于*(*(a+0)+0))就出来问题了...
【 在 katu 的大作中提到: 】
: 首先,先看下这几个函数声明
: fun(const int **a)这个函数表示a是一个指针
: fun(const int *a) 同上
: ...................
传的是fun1(a),刚笔误写成fun1(a[0][0]),抱歉!麻烦看一下为什么报错.?.
#include <stdio.h>
void fun(const int a[][2])
{
printf("%d\n", a[0][0]);
}
int main(void)
{
const int a[2][2] = {1, 2, 3, 4};
fun(a);
return 0;
}
也可以传递数组的引用
void fun(const int (&a)[2][2])
{
printf("%d\n", a[0][0]);
}
【 在 crossJ 的大作中提到: 】
: #include <stdio.h>
: void
: fun(const int **a)
: ...................
int[][] 和int**是两个概念,int[][]本质上来说还是int *如果把程序改成
#include <stdio.h>
2
3 void fun(const int *a)
4 {
5 printf("fun\n");
6 printf("%d\n", a[0]);
7 }
8
9 int main(void)
10 {
11 int a[2][2] = {1,2,3,4};
12 fun(a);
13 return 0;
14 }
是可以正常输出的。
#include <stdio.h>
void fun(const int (*a)[2])
{
printf("%d", a[0][0]);
}
int main(void)
{
int a[2][2] = {1, 2, 3, 4};
int (*p)[2] = a;
fun(a);
return 0;
}
GCC编译会有waning,由于那个形参中的const。
但是运行没有问题