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);
到?
SELECT threads.*, count(comments.thread) AS comments
FROM threads
JOIN comments ON comments.thread = threads.id
GROUP BY 1,2,3,4,5 -- one number here for each column of the threads table
LIMIT 10
答案 0 :(得分:0)
该函数将指针指向指向const
的{{1}}指针。它有以下原型:
char
说明:
void f(char * const *);
中的const
限定符;适用于每个成员。对于const S cs = {1, str}
,它将其应用于指针本身,而不是其内容 1 ,因此其类型为pc
(指向char * const
的常量指针)。
让我们用更简单的例子说明一下:
char
什么是int a = 100;
int * const p = &a;
T pp = &p;
?它是一种适合保持指向T
的{{1}}指针的类型,因此const
的声明是:
int
1)为此,您需要使用pp
答案 1 :(得分:-1)
const char *ptr
:表示ptr应该指向相同的地址,你不能指望ptr持有其他地址。
cs.pc
只是const char *pc
,所以将其传递给函数
void foo_a(const char * * ppcc);
//将无效bcz ppcc可以指向任何地址
这就是为什么你应该使用选项B
void foo_b(char * const * pcpc);