expected 'float **' but argument is of type 'float (*)[5]'

来源:互联网 发布:虚拟机centos安装教程 编辑:程序博客网 时间:2024/06/02 06:02

出错代码:

#include<stdio.h>#include<string.h>#define NUM_NODE 5int test(float **array,int len){    array[0][2]=123.45;    return 0;}int main(){    float num[NUM_NODE][NUM_NODE];    memset(num,0,NUM_NODE*NUM_NODE*sizeof(float));    test(num,NUM_NODE);    return 0;}


编译提示:expected 'float **' but argument is of type 'float (*)[5]'。

而且传递后的二维指针,如果有赋值操作,则会导致程序崩溃。

但是,将test函数转换为int test(float (*array)[NUM_NODE],int len),警告消失。这充分说明二维数组,同二维指针其实是不一样的。二维数组的类型为float(*)[NUM_NODE]。

而且二维指针的分配内存和二维数组也是不同的,内存分布不同;

int test(float **array,int len){    array[0][2]=123.45;    return 0;}int main(){    float **num=NULL;    int i=0;    for(i=0;i<NUM_NODE;i++)    {        num=(float **)malloc(NUM_NODE*sizeof(float*));    }    for(i=0;i<NUM_NODE;i++)    {        num[i]=(float*)malloc(NUM_NODE*sizeof(float));    }    printf("%p,%p\n",num,&num);    float  **ptr=num;    ptr[0][1]=123.45;    test(num,NUM_NODE);    return 0;}

记录在此。我觉的这个问题要是研究明白,需要理解编译原理。

阅读全文
0 0
原创粉丝点击