C:将数组(指针)传递给函数

标签 c arrays pointers reference

我有一个函数 我想要一个函数来接收二维数组 (H),读取指定的列 (col) 并将其传递给另一个数组 (b)。 看来下面的代码不正常,我希望打印 1 。 非常感谢任何指导。

#define nline 5
#define ncol 4

#include <string.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

void count0(int **M,int col, int *a);

void main(){

    int i;     
    int **H;

    H=(int**)malloc(nline*sizeof(int*));
    for(i=0;i<nline;i++){
        H[i]=(int*)malloc(ncol*sizeof(int));
    }

    H[0][0]=8;
    H[0][1]=5;
    H[0][2]=6;
    H[0][3]=0;
    H[1][0]=7;
    H[1][1]=5;
    H[1][2]=4;
    H[1][3]=0;
    H[2][0]=5;
    H[2][1]=1;
    H[2][2]=1;
    H[2][3]=7;
    H[3][0]=0;
    H[3][1]=0;
    H[3][2]=0;
    H[3][3]=2;
    H[4][0]=1;
    H[4][1]=0;
    H[4][2]=1;
    H[4][3]=4;

    int *b;

    int col=1;

    count0(H,col,&b); 

    printf("num 0=%d\n",b[2]); getchar();

}

/////////////////////////////////////////////////////////////////////////////////

void count0(int **M,int col, int *a){

    int i;

    a=(int*)malloc(1*sizeof(int));

    for(i=0;i<nline;i++){
        a[i]=M[i][col];
        a=realloc(a,(i+2)*sizeof(int));
    }
}

最佳答案

您对输出 b 的论证是错误的。它需要是指向指针的指针(就像你传递它的方式一样)。现在你应该得到一个关于它的编译器警告。函数原型(prototype)应该是

void count0(int **M,int col, int **a);

然后在函数中你需要使用解引用运算符来访问a:

*a = malloc(1*sizeof(int));

请注意,我没有强制转换 malloc 的返回值,没有必要,您也不应该。

关于C:将数组(指针)传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17952494/

相关文章:

c - c中绝对最快的for循环是什么?

创建二叉搜索树而不更新指针

c - 通过套接字发送数据时,ENOENT 是什么意思?

c - 为什么从 main() 向函数传递链表指针会影响 main 中的链表?

c++ - 将 std::vector 传递给 C++ 中的函数时的内存分配

c# - 存储大量数据并在需要时访问它

java - 当我返回数组时,出现 "cannot find symbol"错误

javascript - 如何使用递归函数将第一个数组元素添加到其他数组元素?

arrays - 如何找到数组类型 NSDecimalNumber 的总和

将 char 指针转换为 int 指针 - 缓冲区错误 10