int* i, int *i, int * i, int*i区别

本文详细解析了C语言中指针声明的正确语法,强调了单行声明多个指针变量时,星号(*)应紧随数据类型的重要性。通过对比错误与正确的示例,帮助读者理解如何避免常见的指针声明误区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

没有区别

星号

  • *和右侧 参数i匹配*i
  • *不是和左侧 类型int匹配int*

所以单行多个pointer type声明有问题

//错误:
//int *i
//int j;
//int c;
int* i,j,c;
// 正确:
int *i, *j, *c;

文档
StackExchange文档

<think>嗯,用户问的是int* i和int *i的区别,这看起来是关于C/C++中指针声明的写法差异。我需要先回忆一下这两种写法在语法上的不同,以及它们在实践中的使用情况。 首先,C和C++中的指针声明,语法上允许将星号靠近类型或变量名。比如int* i和int *i。从编译器的角度来看,这两种写法是等价的,声明的结果都是i是一个指向int指针。不过,这里可能涉及到编码风格和可读性的问题。 我记得有些资料里提到,将星号靠近类型(int* i)可能强调i的类型是指针,而靠近变量名(int *i)则可能强调声明中的每个变量都需要自己的星号。比如,如果同时声明多个变量,int* a, b;实际上只有a是指针,b是int。而写成int *a, b;会更明确地显示a是指针,b不是。这可能是一种编码习惯,避免误解。 另外,C++的一些风格指南,比如Bjarne Stroustrup的建议,倾向于将星号靠近类型,强调类型信息。而C的传统写法可能更常见将星号靠近变量名。这可能是因为在C中,声明多个变量时,每个指针都需要显式的星号,而靠近变量名可以更清楚地表达这一点。 还需要考虑代码的可读性和一致性。如果团队中有统一的编码规范,那么遵循其中一种写法更为重要。例如,如果团队使用int* i的风格,那么在整个项目中保持这种一致性有助于维护。 可能用户在实际编码中遇到了混淆,比如同时声明多个指针时的错误,或者阅读不同风格的代码时的困惑。需要指出两种写法在语法上等效,但在风格和习惯上有差异,并强调在声明多个变量时的注意事项。 总结一下,两者的区别主要在于编码风格,而不是语法或功能上的差异。需要提醒用户注意在声明多个变量时的正确写法,避免错误,同时建议遵循团队或项目的代码规范。</think>在C/C++中,`int* i`和`int *i`的底层含义完全相同,二者均声明了一个指向整型的指针变量`i`。它们的区别**仅在于编码风格**,具体差异如下: --- ### 1. **强调的侧重点不同** - **`int* i` 风格** 将`*`靠近类型(`int`),强调`i`的**类型是指针**。这种写法更符合“类型修饰符属于类型本身”的直觉,尤其适合面向对象编程(如C++)中强调类型的场景。 *示例:* ```c++ int* ptr1; // 明确表示ptr1的类型是"int指针" ``` - **`int *i` 风格** 将`*`靠近变量名(`i`),强调**声明符(`*`)属于变量本身**。这种写法源于C语言传统,更直观地体现“`*i`是一个`int`”的声明逻辑。 *示例:* ```c int *ptr2; // 强调ptr2是一个指针,通过*操作符访问其指向的int ``` --- ### 2. **多变量声明时的陷阱** 两种风格在**单变量声明**中无实际差异,但在**多变量声明**时容易引发误解: ```c int* a, b; // 只有a是指针,b是普通int!(可能违背直觉) int *c, *d; // c和d均为指针(传统C风格更清晰) ``` - **`int*`风格的陷阱**:若误以为`int*`修饰所有后续变量,会导致`b`实际为`int`而非指针。 - **`int *`风格的优点**:明确体现`*`需为每个变量单独添加。 --- ### 3. **代码规范建议** - **C语言**:传统习惯多用`int *i`,强调变量与`*`的关联。 - **C++**:倾向于`int* i`,强调类型系统的抽象性(如Bjarne Stroustrup的《C++编程语言》)。 - **团队协作**:优先遵循项目已有规范,保持代码一致性。 --- ### 总结 | 写法 | 核心理念 | 适用场景 | 注意事项 | |-----------|----------------------------|------------------|-----------------------| | `int* i` | 强调类型是指针 | C++、面向对象设计 | 多变量声明需谨慎 | | `int *i` | 强调`*`属于变量声明符 | C语言、传统代码库 | 多变量声明更直观 | 实际编码中,两种写法**完全等价**,选择哪种取决于个人习惯或团队规范。关键是多变量声明时需显式为每个指针添加`*`,避免错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值