二级指针干函数形参
二级指针做函数形参int *matvec(int **A, int *x, int n){int i, jint *y (int *)malloc(n * sizeof(in
二级指针做函数形参
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
[解决办法]这个val是在栈上分配的内存,函数返回之后,这个函数所占用的栈内存可能会被其他的变量使用。
如果真的想返回指针的话,先malloc这个val,然后再返回指针,不过这个时候需要自己去释放。
[解决办法]
按照这个函数的写法, 只能传这样的参数给它:
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;
}
通常来说返回局部变量的指针是不行的, 函数运行完后, 局部变量就被回收了, 指向的内存可能被分配来做其他事情了. 不过看你这个函数的名字似乎有特殊的用途, 也许在特定的用法下是没问题的, 看你怎么使用这个函数的, 用它来完成什么功能的了.