为什么要把指向指针的指针作为函数的参数
答案:2 悬赏:0
解决时间 2021-02-12 06:03
- 提问者网友:长安小才冯
- 2021-02-11 10:51
为什么要把指向指针的指针作为函数的参数
最佳答案
- 二级知识专家网友:恕我颓废
- 2021-02-11 11:22
因为指针是作为参数传递给函数的,传递的是指针指向的值。其本身并没有传递给函数。
全部回答
- 1楼网友:你把微笑给了谁
- 2021-02-11 12:50
这说明你对指针理解还不够透彻。
int **t;
还没有分配内存能拿来t = b么?
这个先不说,
b[3][2]是2维的数组,所以
int b[3][2]={{1,2},{1,2},{1,3}};
不仅自己方便辨认也对你的代码清晰有好处
至于你函数的传值,我不需要看你的函数就知道不行
因为b[3][2]这样的数组,可以看成3行和2列,也可以看成
3个指向2维数组的指针
但是函数传值的时候编译器可以figure out数组前面的那一维,但是不能知道后面那一组的大小,所以你要明确指明后面的大小,所以prototype里要写
int m[][a],a是一个值
至于内存分配,比如
我写个
int *i, a;
a = 10;
*i = a;
这个对么?明显不对,因为i是指针,没有分配过内存
我不是中文学的,所以表述有点不清,但是malloc和指针是比较有难度的,慢慢来
还有楼上那位兄弟写的挺好,这里提醒一下需要注意int *t[n]和int (*t)[n]相差甚远,所以留心。
今天看了一下发现俺对你的意思理解有点偏差,不好意思,
“指向指针的指针不是可以表示二维数组么?为什么传二维数组给**m 报错?”
指向指针的指针可以表示二维数组,前提是你要先分配内存.
比如
int **t;
t = (int **)malloc(3*sizeof(int *));
这样t就是一个含有3个指针的数组,
然后你再单独对每一个指针分配内存:
int i;
for(i = 0; i < 3; i++){
t[i] = (int *)malloc(2*sizeof(int));
}
这样t才可以看做二维数组,
而单单的int **t仅仅是指向一个指向整数的指针。
所以你可以写
int **t, *ptr, a;
a = 10;
ptr = &a;
t = &ptr;
但是不能直接用作函数原型里作为2维数组传值的形参。
函数原型里要写作
void matrixchain(int *p,int n,int m[][6],int s[][6]);
这样传值才是对的,原因参见我前面讲的
这个就是解决方法
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯