读书人

二级指针干函数形参

发布时间: 2013-07-09 09:50:47 作者: rapoo

二级指针做函数形参

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;
}

调试书上的一段代码,函数第一个形参是二级指针形式,对应的实参应该怎么写啊?
指针 malloc
[解决办法]
引用:
Quote: 引用:

按照这个函数的写法, 只能传这样的参数给它:

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;
}

这个val是在栈上分配的内存,函数返回之后,这个函数所占用的栈内存可能会被其他的变量使用。
如果真的想返回指针的话,先malloc这个val,然后再返回指针,不过这个时候需要自己去释放。
[解决办法]
引用:
Quote: 引用:

按照这个函数的写法, 只能传这样的参数给它:

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;
}


通常来说返回局部变量的指针是不行的, 函数运行完后, 局部变量就被回收了, 指向的内存可能被分配来做其他事情了. 不过看你这个函数的名字似乎有特殊的用途, 也许在特定的用法下是没问题的, 看你怎么使用这个函数的, 用它来完成什么功能的了.

读书人网 >C语言

热点推荐