首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

二级指针干函数形参

2013-07-09 
二级指针做函数形参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
[解决办法]
引用:
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;
}


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

热点排行