二维数组传参错误:cannot convert parameter 1 from 'int *[2]' to 'const int *[]'
#include<stdio.h>#include<stdlib.h>int*a[2];voidInit(){for(inti=0;i<2;i++)a[i]=(int*)...
#include <stdio.h>
#include <stdlib.h>
int *a[2];
void Init()
{
for (int i=0;i<2;i++)
a[i]=(int *)malloc(sizeof(int)*2);
}
void f(const int * a[2])
{
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
printf("%d ",a[i][j]);
}
void main()
{
Init();
int i,j;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
a[i][j]=i+j;
f(a);
}
编译的时候出现cannot convert parameter 1 from 'int *[2]' to 'const int *[]'的错误。将f(const int * a[2])改成f(const int *const a[2])才正确,这是为什么呢? 展开
#include <stdlib.h>
int *a[2];
void Init()
{
for (int i=0;i<2;i++)
a[i]=(int *)malloc(sizeof(int)*2);
}
void f(const int * a[2])
{
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
printf("%d ",a[i][j]);
}
void main()
{
Init();
int i,j;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
a[i][j]=i+j;
f(a);
}
编译的时候出现cannot convert parameter 1 from 'int *[2]' to 'const int *[]'的错误。将f(const int * a[2])改成f(const int *const a[2])才正确,这是为什么呢? 展开
1个回答
展开全部
void f(int * const a[2])
const 修饰的是星号 * 与变量整体。const int *a[2] 的意义是,将 *a[0] 和 *a[1] 均为限定为 const int 类型,即函数内修改 *a[X]、*a[Y]、a[i][j] 之类的都不允许。而参数 a 则不受 const 的限制,被认为是 int ** 类型。你传入的 a 是一个数组名,数组名本身应该是 const int ** 即只读的,将 const 转为非 const 的 int **,当然会警告。就像这样调用:
void f(char *str);
char *p = "Hello world!";
f(p);
得到类似的警告信息。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询