"typedef char CHAR [10];"是什么意思?

Rak*_*ade 1 c++ typedef

遇到了一段代码,它定义并使用了类似于下面的typedef:

typedef char CHAR[10];
void fun(std::string s) {}
int main()
{
    CHAR c;
    fun(c);
 }
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这是有效的.我的问题是为什么定义和使用这样的typedef以及它是如何工作的.在我看来,CHAR本身不应该起作用,它应该始终是CHAR [10].

此外,如果我更改fun声明以接受std :: string&而不是std :: string,则会抛出编译错误.我不知道为什么.

Lig*_*ica 8

这是C声明符语法的一个令人困惑的部分,并没有按照您的想法执行.

抛弃逻辑并遵循螺旋规则.

你认为它做什么

做出CHAR[10]意义char.

实际上是做什么的

做出CHAR意义char[10].

这就是为什么使用CHAR" 单独使用"在这里完全有效,如果非常愚蠢的话.我的意思是,严肃地说,首先对固定大小的阵列进行类型设置是非常愚蠢的,但命名它CHAR需要饼干.