二级指针做函数形参

whdugh 2013-06-23 10:36:19

int *matvec(int **A, int *x, int n)
{
int i, j;

int *y = (int *)malloc(n * sizeof(int));

for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
y[i] += A[i][j] * x[j];

return y;
}
int main()
{
int i;
int a[n][n] = {1, 2, 3, 4};
int x[n] = {1, 2};

for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
printf("%d", *(matvec(&a[i][j], x, n)); //

return 0;
}

调试书上的一段代码,函数第一个形参是二级指针形式,对应的实参应该怎么写啊?
...全文
184 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2013-06-23
  • 打赏
  • 举报
回复
按照这个函数的写法, 只能传这样的参数给它: int a[n][n] = {1, 2, 3, 4}; int* b[n]; for(i = 0; i < n; ++i) b[n] = a[n]; matvec(b, .....)
www_adintr_com 2013-06-23
  • 打赏
  • 举报
回复
引用 5 楼 adlay 的回复:
matvec 函数里面在分配内存, 你不能传分配好内存的指针给它! 要传还未分配内存的指针才行, 否则造成内存泄漏. 编译不过还算好的了.
看错了, 它并不是对传进去的参数上分配内存的. int* p = NULL; matvec(&p, ....) 这种写法也是错误的.
www_adintr_com 2013-06-23
  • 打赏
  • 举报
回复
matvec 函数里面在分配内存, 你不能传分配好内存的指针给它! 要传还未分配内存的指针才行, 否则造成内存泄漏. 编译不过还算好的了.
whdugh 2013-06-23
  • 打赏
  • 举报
回复
引用 2 楼 flydreamGG 的回复:
matvec(a, x, n)
matvec(a,x,n),这个类型不匹配吧,a是指向数组的指针啊
whdugh 2013-06-23
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
int* p = NULL; matvec(&p, ....)
这个好理解,现在把一个二维数组做实参,要求指向指针的指针,怎么写啊?
昨夜无风 2013-06-23
  • 打赏
  • 举报
回复
matvec(a, x, n)
www_adintr_com 2013-06-23
  • 打赏
  • 举报
回复
int* p = NULL; matvec(&p, ....)
www_adintr_com 2013-06-23
  • 打赏
  • 举报
回复
引用 8 楼 whdugh 的回复:
[quote=引用 7 楼 adlay 的回复:] 按照这个函数的写法, 只能传这样的参数给它: int a[n][n] = {1, 2, 3, 4}; int* b[n]; for(i = 0; i < n; ++i) b[n] = a[n]; matvec(b, .....)
大神 这段代码不知道哪里错了 求帮助
int *stackref()
{
  int val;

  return &val;
}
[/quote] 通常来说返回局部变量的指针是不行的, 函数运行完后, 局部变量就被回收了, 指向的内存可能被分配来做其他事情了. 不过看你这个函数的名字似乎有特殊的用途, 也许在特定的用法下是没问题的, 看你怎么使用这个函数的, 用它来完成什么功能的了.
HUANGFEIDIAN 2013-06-23
  • 打赏
  • 举报
回复
引用 8 楼 whdugh 的回复:
[quote=引用 7 楼 adlay 的回复:] 按照这个函数的写法, 只能传这样的参数给它: int a[n][n] = {1, 2, 3, 4}; int* b[n]; for(i = 0; i < n; ++i) b[n] = a[n]; matvec(b, .....)
大神 这段代码不知道哪里错了 求帮助
int *stackref()
{
  int val;

  return &val;
}
[/quote] 这个val是在栈上分配的内存,函数返回之后,这个函数所占用的栈内存可能会被其他的变量使用。 如果真的想返回指针的话,先malloc这个val,然后再返回指针,不过这个时候需要自己去释放。
whdugh 2013-06-23
  • 打赏
  • 举报
回复
引用 7 楼 adlay 的回复:
按照这个函数的写法, 只能传这样的参数给它: int a[n][n] = {1, 2, 3, 4}; int* b[n]; for(i = 0; i < n; ++i) b[n] = a[n]; matvec(b, .....)
大神 这段代码不知道哪里错了 求帮助
int *stackref()
{
  int val;

  return &val;
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧