gpt4 book ai didi

c - 将非常量值传递给在 C 中采用 const 参数的函数的正确方法是什么

转载 作者:行者123 更新时间:2023-12-02 01:55:27 24 4
gpt4 key购买 nike

我创建了一个函数,该函数应该打印一个数组数组用于测试目的。由于我不想修改函数本身的任何内容,所以我认为函数定义有一个 const 值和 const 指针会很好。

void test_print(const char*** const array);

/*Some code*/


void test_print(const char*** const command_array){
int j=0;
while(command_array[j]!=NULL){
int k=0;
while(command_array[j][k]!=NULL){
printf("%s and %d\n",(command_array[j][k]),j);
++k;
}
++j;
}
}

但是,如果我不通过像这样转换我的数组来调用函数:

test_print((const char*** const)command_array);

然后我得到错误:

invalid conversion from 'char***' to 'const char***'

所以我的问题是:我做的是对的还是有另一种方法来进行这种转换?说这个转换只会使函数内部的数组常量是真的吗?

最佳答案

将 command_array 转换为 const char*** const 实际上并不安全。

考虑这段代码:

void test_print(const char*** const command_array){    // command_array is a constant pointer to a non-constant pointer to a non-constant pointer to a constant char    // we can easily change one of the non-constant levels    **command_array = "Hello";}void fail(){    char command[6] = "hello";    char *level1 = command;    char **level2 = &level1;    char ***level3 = &level2;    ***level3 = 'j'; // valid; now command holds "jello"    test_print((const char*** const)level3);    ***level3 = 'z'; // segfault!}

我相信(意思是我还没有测试过)const char* const* const* const 是安全的,尽管仍然没有隐式转换。

最后一个 const 也不是必需的 - const char* const* const*const char* const* const* const 相同>

关于c - 将非常量值传递给在 C 中采用 const 参数的函数的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20390403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com