指针的定义

指针的定义

定义一个指针:

1
char *p
1
char*p

哪个写法正确?

两个写法在语法上都是完全正确的。 编译器根本不在乎空格放在哪里,它甚至允许你写成 char*p(中间没空格)。

但是,学习C语言,应该使用第一种写法:

✅ 推荐写法:char *p;

为什么?这里有一个 C 语言中非常著名的“视觉陷阱”


1. 为什么 char* p 容易坑人?

如果你习惯写 char* p,你的大脑会认为 char* 是一个整体(一种叫“字符指针”的数据类型)。

当你只定义一个变量时,没问题:

1
char* p; // 没问题,p 是指针

但是,当你一行定义两个变量时,陷阱就出现了:

1
char* p, q; 

你的直觉可能告诉你:pq 都是指针。 实际情况是:

  • p 是指针 (char *)
  • q 仅仅是一个普通的字符 (char) 😱

因为在 C 语言的语法规则里,**\* 号是跟变量名绑定的,不是跟类型名绑定的。**


2. 为什么推荐 char *p

这种写法更符合 C 语言的底层逻辑:

1
char *p;

这句话的意思是:**\*p 是一个 char**。 (翻译:如果你对 p 进行取值操作 *p,你会得到一个 char 类型的数据。)

当你这样写的时候,定义多个变量就不会弄错了:

1
2
char *p, *q; // 很明显,p和q前面都有星星,它俩都是指针
char *p, q; // 很明显,p是指针,q是普通字符

3. 总结

  • char \*p (星星靠右):这是 C 语言 的传统写法(K&R 风格)。推荐你现在使用,因为它能帮你避开多变量定义的坑,强调 *p 的求值结果。
  • **char\* p (星星靠左)**:这是 C++ 程序员常用的写法。因为在 C++ 的思维里,强调类型是 char*(指针类型)。但写 C 代码时要小心上面说的那个坑。

函数声明的指针传递

1
int function(char*);

char*中间要不要加空格?

答案是:加不加都可以。

在 C 语言的函数声明中,编译器对空格非常“宽容”。以下几种写法在计算机眼里是完全一样的:

1. 常见写法

1
2
3
int function(char*);   // 写法 A:紧凑(常用)
int function(char *); // 写法 B:中间加空格(常用,看着不累)
int function(char * ); // 写法 C:两边都加空格(语法没错,但没人这么写)

为什么? 因为这是一个“函数声明”(Prototype)。此时编译器只需要知道:“哦,这个函数需要接收一个‘字符指针’类型的参数”。它并不关心这个指针叫什么名字,也不关心星星 * 挨着谁。


指针的定义
http://example.com/2025/12/30/指针的定义/
作者
王柏森
发布于
2025年12月30日
许可协议