int *与int*

简介:

 第一个例子是我们喜闻乐见的C语言的指针变量定义啦:

1
int  a, *b, **c;

  相信很多人都被这种东西坑过,所以很多教科书都告诉我们,当定义一个变量的时候,类型最后的那些星号都要写在变量前面,避免让人误解。所以很多人都会想,为什么要设计成这样呢,这明显就是挖个坑让人往下跳嘛。但是在实际上,这是一个语法的一致性好的例子,至于为什么他是个坑,问题在别的地方。

  我们都知道,当一个变量b是一个指向int的指针的时候,*b的结果就是一个int。定义一个变量int a;也等于在说“定义a是一个int”。那我们来看上面那个变量声明:int *b;。这究竟是在说什么呢?其实真正的意思是“定义*b是一个int”。这种“定义和使用相一致”的方法其实正是我们要推崇的。C语言的函数定义参数用逗号分隔,调用的时候也用逗号分隔,这是好的。

摘自:如何设计一门语言(一)——什么是坑(a)


  在C语言的声明中,先给出一个基本类型,紧随其后的是一个标识符列表,这些标识符组成表达式,用于产生基本类型的变量。例如:

1
int  *a;

  这条语句表示表达式*a产生的结果类型是int。知道了*操作符执行的是间接访问操作以后,我们可以推断a肯定是一个指向int的指针。

  C在本质上是一种自由形式的语言,这很容易诱使你把星号写在靠近类型的一侧,如下所示:

1
int * a;

  这个声明与前面一个声明具有相同的意思,而且看上去更为清楚,a被声明为类型int*的指针。但是,这并不是一个好的技巧,原因如下:

1
int * b, c, d;

  人们很自然地认为这条语句把所有三个变量声明为指向整型的指针,但事实上并非如此。我们被它的形式愚弄了。星号实际上是表达式*b的一部分,只对这个标识符有用。b是一个指针,但其余两个变量只是普通的整型。要声明三个指针,正确的语句如下:

1
int  *b, *c, *d;

摘自:《C和指针》(3.2.3 声明指针)


*** walker ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1673626如需转载请自行联系原作者

RQSLT
相关文章
|
1月前
|
存储 对象存储 C++
C++ 中 std::array<int, array_size> 与 std::vector<int> 的深入对比
本文深入对比了 C++ 标准库中的 `std::array` 和 `std::vector`,从内存管理、性能、功能特性、使用场景等方面详细分析了两者的差异。`std::array` 适合固定大小的数据和高性能需求,而 `std::vector` 则提供了动态调整大小的灵活性,适用于数据量不确定或需要频繁操作的场景。选择合适的容器可以提高代码的效率和可靠性。
75 0
|
8月前
|
存储 算法 物联网
int8与long long的深入对比与探讨
int8与long long的深入对比与探讨
|
8月前
|
存储 编译器 程序员
int 和 long 的区别
int 和 long 的区别
|
编译器 C语言 C++
C/C++中int128的那点事
C/C++中int128的那点事
637 0
C/C++中int128的那点事
(*void(*)())0)()和void(*signal(int, void(*)(int)))(int); 讲解
(*void(*)())0)()和void(*signal(int, void(*)(int)))(int); 讲解
145 0
|
C语言 C++
C++中int int& int * int**的区别、联系和用途
C++中int int& int * int**的区别、联系和用途
579 0
C++中int int& int * int**的区别、联系和用途
|
存储 关系型数据库 MySQL
Int(4)和Int(11) 你选的是哪个?
Int(4)和Int(11) 你选的是哪个?
680 0
Int(4)和Int(11) 你选的是哪个?
int(*p)[4] int*p[4]
int(*p)[4] int*p[4]
320 0
int 与 unsigned int
cpp primer  P31 带符号类型和不带符号类型   1、除去布尔型和扩展字符外,其他整型可以划分为带符号的(signed)和无符号的(unsigned)两种。
1171 0
*(int*)&p
Look at following code: void func() { // ... } int main() { void (*p)(); *(int*)&p = (int)func; (*p)(); return 0; } 分析: void(p)(); 这行代码定义了一个指针变量p,p指向一个函数。
1319 0