c - 如果我传递一个非常量元素数组,为什么编译器会警告我?
问题描述
将位置标记为const
一种“降级”:一切都可以成为const
,但反过来不可能发生。因此,如果我将非const
字符串传递给需要字符串的函数const
没有问题,但如果我执行相反的操作,编译器会警告我。
因此这段代码工作正常:
#include <stdio.h>
void print_constant_string (const char * const str) {
printf("%s\n", str);
}
int main () {
char * my_string = "Hello world!";
print_constant_string(my_string);
return 0;
}
我从来不明白的是为什么这段代码反而给了我一个警告(“警告:从不兼容的指针类型 [-Wincompatible-pointer-types] 传递 'print_array_of_constant_strings' 的参数 1”):
#include <stdio.h>
void print_array_of_constant_strings (const char * const * const strarr) {
for (size_t i = 0; strarr[i]; printf("%s\n", strarr[i++]));
}
int main () {
char ** my_array = (char * []) { "foo", "bar", NULL };
print_array_of_constant_strings(my_array);
return 0;
}
我没有像以前一样“降级”我的变量吗?如果编译器没有警告我,可能会出什么问题?
解决方案
推荐阅读
- javascript - 如何使用 styled-component设置样式
- java - 如何将数据从一个活动获取到另一个活动并使用它们?
- flutter - 由于行之间的列颤动导致的像素错误
- c# - ASP.Net 的生命周期事件在哪里声明?(不是事件处理程序)
- ios - 尝试使用 Webstorm 进行 React Native iOS 开发时出现 POD 错误
- r - 如何在涉及逐渐增加单独在线 csv 文件的 R 操作中编码?
- java - 函数执行序列在 Java 中是如何工作的?
- javascript - 开玩笑测试不和谐机器人命令
- angular - Angular SSR:在加载组件期间显示微调器
- notepad++ - 关于notepad++某些字符之间双击行为的问题