Advertisement

学习C语言确实有一定难度,并且在处理涉及const的参数时需要注意相关规则

阅读量:

这是在逛论坛的时候看到的一个问题。

例1:

char ptr;
void demo(const char
p)
{
;
}

int main(void)

{

demo(prt);

}

编译后不报错。

例2:

char *ptr[];

void demo(const char* p[])

{

;

}

int main(void)

{

demo(prt);

}

在编译过程中出现错误,在项目根目录下App文件夹中的主程序.c文件第37行处提示出错:函数参数类型与预期的字符指针类型不匹配导致无法正确传递数据

先分析例2:

报错原因是形参与实参的指针类型不一致。

以下是对原因的分析:在C语言中,当形参是数组时(即形式参数是一个数组),该形式参数会被视为一维指针变量。因此,在这种情况下(即当形参是一个字符类型的数组时),const char* p[] 的实际存储结构等价于 const char**p 的形式。这是因为前者表示一个指向由多个字符组成的字符数组的一维指针变量(即单层嵌套的动态内存区域),而后者则表示一个指向另一个char* 的二维指针变量(即双层嵌套的动态内存区域)。

当 *prt[] 变量作为形参传递的时候,等价于 char **ptr,

当运行一个名为demo(ptr)的程序时,在函数参数中指定实参会自动传入形参

全部评论 (0)

还没有任何评论哟~