指针的定义
指针的定义
定义一个指针:
1 | |
1 | |
哪个写法正确?
两个写法在语法上都是完全正确的。 编译器根本不在乎空格放在哪里,它甚至允许你写成 char*p(中间没空格)。
但是,学习C语言,应该使用第一种写法:
✅ 推荐写法:char *p;
为什么?这里有一个 C 语言中非常著名的“视觉陷阱”。
1. 为什么 char* p 容易坑人?
如果你习惯写 char* p,你的大脑会认为 char* 是一个整体(一种叫“字符指针”的数据类型)。
当你只定义一个变量时,没问题:
1 | |
但是,当你一行定义两个变量时,陷阱就出现了:
1 | |
你的直觉可能告诉你:p 和 q 都是指针。 实际情况是:
p是指针 (char *)q仅仅是一个普通的字符 (char) 😱
因为在 C 语言的语法规则里,**\* 号是跟变量名绑定的,不是跟类型名绑定的。**
2. 为什么推荐 char *p ?
这种写法更符合 C 语言的底层逻辑:
1 | |
这句话的意思是:**\*p 是一个 char**。 (翻译:如果你对 p 进行取值操作 *p,你会得到一个 char 类型的数据。)
当你这样写的时候,定义多个变量就不会弄错了:
1 | |
3. 总结
char \*p(星星靠右):这是 C 语言 的传统写法(K&R 风格)。推荐你现在使用,因为它能帮你避开多变量定义的坑,强调*p的求值结果。- **
char\* p(星星靠左)**:这是 C++ 程序员常用的写法。因为在 C++ 的思维里,强调类型是char*(指针类型)。但写 C 代码时要小心上面说的那个坑。
函数声明的指针传递
1 | |
char*中间要不要加空格?
答案是:加不加都可以。
在 C 语言的函数声明中,编译器对空格非常“宽容”。以下几种写法在计算机眼里是完全一样的:
1. 常见写法
1 | |
为什么? 因为这是一个“函数声明”(Prototype)。此时编译器只需要知道:“哦,这个函数需要接收一个‘字符指针’类型的参数”。它并不关心这个指针叫什么名字,也不关心星星 * 挨着谁。
指针的定义
http://example.com/2025/12/30/指针的定义/