c - const 结构实例中成员的有效类型?

标签 c struct constants member

typedef struct S {
    int i;
    char *pc;
} S;

void foo() {
    char str[] = "abcdefg";
    const S cs = {1, str};
    // more code
}

在上面的例子中,csconst S 类型,而 cs.i 实际上是 const int i,因为我无法将 &cs.i 传递给需要 int * 的函数,而只能传递 const int *

问题来了,cs.pc的有效类型是什么?是 const char * 还是 char * const?换句话说,我可以将 &cs.pc 传递给下面的哪个函数?

A: void foo_a(const char * * ppcc);
B: void foo_b(char * const * pcpc);

最佳答案

该函数采用指向 const 的指针,指向 char。它有以下原型(prototype):

void f(char * const *);

解释:

const S cs = {1, str} 中的const 限定符;适用于每个成员。对于pc,它将它应用于指针本身,而不是它的内容1,因此它的类型是char * const(指向的常量指针字符).

让我们用更简单的例子来说明:

int a = 100;
int * const p = &a;
T pp = &p;

什么是T?它是一种适合保存指向 const 的指针和指向 int 的指针的类型,所以这个 pp 的声明是:

int *const *pp = &p;

1) 为此,您需要使用 const char *pc;

更改该成员的结构定义

关于c - const 结构实例中成员的有效类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47244996/

相关文章:

c - C 程序中的共享常量

symfony - 如何在 Symfony 2 中将 PHP 常量作为服务参数传递?

c - 程序在没有头文件的情况下编译和执行 Turbo C++

c - 为什么 strcat 在循环中工作很奇怪?

class - 结构成员名称是否比我使用继承的类成员使用更多内存?

sorting - 如何按字母顺序对结构字段进行排序

c - linux中c程序中的段错误

c - 错误 : dm_mmc_ops undeclared (first use in this function)

c++ - C++ 中 sizeof(struct) 的奇怪输出

c++ - 在另一个函数/构造函数 [C++] 中初始化后将变量设置为只读