首页 > 解决方案 > 如果我传递一个非常量元素数组,为什么编译器会警告我?

问题描述

将位置标记为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;
}

我没有像以前一样“降级”我的变量吗?如果编译器没有警告我,可能会出什么问题?

标签: cconstants

解决方案


推荐阅读