typedef struct S {
int i;
char *pc;
} S;
void foo() {
char str[] = "abcdefg";
const S cs = {1, str};
// more code
}
在上面的例子中,cs
是 const 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/