gpt4 book ai didi

c - 为什么在使用 typedef 时非 const 指针被视为 const?

转载 作者:太空狗 更新时间:2023-10-29 17:16:30 25 4
gpt4 key购买 nike

typedef char* c;
const c ptr1 = "pointer";
++ptr1; /// error
const char* ptr2 = "pointer";
++ptr2; /// runs fine

现在 ptr1 应该是 const char* 类型,因此是非常量指针,那么为什么它被视为常量指针?

最佳答案

它们不一样。

第一个指定一个 const-pointer-to-char,第二个指定一个 pointer-to-const-char。

尝试从右到左阅读:

const char *p;  // p is a pointer to char which is const
char const *p; // p is a pointer to const char (same as previous)
char * const p; // p is a const pointer to char
char const * const p; // p is a const pointer to const char

通过使用 typedef typedef char* c,您可以将“指向 char 的指针”的含义打包到一个别名 c 中:

const c p; // p is a const [c] --> p is a const [pointer to char]

补充说明:

Typedef 不像宏那样就地扩展,即

const c p;

真的变成了

const [char*] p;

不会变成

const char* p; // Nope.

不要像在你脑海中的宏一样展开它,使用 typedef,你已经将 char* 绑定(bind)在一起并形成了一个原子。

关于c - 为什么在使用 typedef 时非 const 指针被视为 const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11864964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com