解剖指针之指针经典用例初解

简介: 特别说明,本文是从《让你不再害怕指针》里整理而来,向原作者致敬! 1、int p; 这是一个普通的整型变量。   2、int *p; 首先从p处开始,先与*结合,所说明p是一个指针; 然后再与int 结合,说明指针所指向的内部的类型是int型; 所以p是一个返回整型数据的指针。

特别说明,本文是从《让你不再害怕指针》里整理而来,向原作者致敬!

1、int p;

这是一个普通的整型变量。

 

2、int *p;

首先从p处开始,先与*结合,所说明p是一个指针;

然后再与int 结合,说明指针所指向的内部的类型是int型;

所以p是一个返回整型数据的指针。

 

3、int p[3];

首先从p处开始,先与[]结合,说明p是一个数组;

然后与int结合,说明数组里的元素是整型的;

所以,p是一个由整型数据组成的数组。

 

4、int *p[3];

首先从p处开始,先与[]结合,因为其优先级比*高,所p是一个数组;

然后再与*结合,说明数组里面的元素的指针类型;

然后再与int结合,说明指针所指向的内容的类型是整型的;

所以p是一个由返回整型数据的指针所组成的数组。

 

5、int (*p)[3];

首先从p处开始,先与*p结合,说明p是一个指针;

再与[]结合,说明指针指向的是一个数组;

然后与int结合,说明数组里面的元素是整型的;

所以,p是一个指向由整型数据组成的数组的指针。

 

6、int **p;

首先从p处开始,先与*结合,说明p是一个指针;

再与*结合,说明指针所指向的元素是指针;

然后再int结合,说明p所指向的指针所指向的元素是一个整型的数据。

案例证明

int a = 100;
int *p1 = &a;
int **p =  &p1;

printf("   *p = %d,&p=%p \n   *p1=%d,&p1=%p\n   a=%d,&a=%p\n",
              *p,&p,   *p1,&p1,  a,&a);
printf("   **p = %d\n",**p);

image

图1

 

上例程中,指针和局部变量都属于动态数据,分别存储在堆和栈中。

 image

图2

由数据在内存中的示意图可知,指针变量p的空间存的是p1的地址,指针变量p1的空间存储的是变量a的地址。所以,对于指针变量p,*p得到的是p1的地址,**p得到的是a的地址。由此验证上图1的图示。

 

7、int p(int);

从p处起,先与()结合,说明p是一个函数;

然后进入()分析,说明该函数有一个int变量参数;

再与外面的int结合,说明函数的返回值是一个整型数据。

 

8、int (*p)(int);

从p处起,先与指针结合,说明p是一个指针;

然后与()结合,说明指针指向的是一个函数;

再与()里的int结合,说明该函数有一个int型的变量参数;

最后与外面的int结合,说明函数的返回类型是整型;

所p是一个指向有一个整型参数且返回类型为整型的函数的指针。

 

9、int *(*p(int))[3];

从p处开始,先与()结合,说明p是一个函数;

再进入()内部与int结合,说明该函数有一个int型的参数;

再与*结合,说明函数的返回值是一个指针;

再与外面的[]结合,说明返回的指针指向的是一个数组;

再与最外的*结合,说明数组里的元素是指针(如 *a[3]);

最后与int结合,说明指针指向的内容是整型数据;

所以,p是一个参数为int型数据且返回一个指向由整型指针变量组成的数组的指针变量的函数。

相关文章
|
C语言 C++
【C语言】8道经典指针笔试题(深度解剖)
【C语言】8道经典指针笔试题(深度解剖)
130 0
|
C语言
【C语言】经典指针笔试题(深度解剖)(下)
【C语言】经典指针笔试题(深度解剖)(下)
63 0
|
C语言
【C语言】经典指针笔试题(深度解剖)(上)
【C语言】经典指针笔试题(深度解剖)(上)
60 0
C语言指针深度解剖
对C语言的指针进行深入学习
C语言指针深度解剖
|
C++
解剖一道有意思的指针题
cpp这个指针先+1,表示什么意思呢?cpp这个指针指向的是cp的元素的地址,cpp+1也就是cp元素的地址要+1,所以cpp指向的方向就改变了,然后再解引用找到圆圈1,圆圈1就是右边的方块,而再解引用,就是访问方块里面的圆圈2了,得到圆圈2,圆圈2就是POINT首字母的地址,所以打印的话就会打印出POINT。
67 0
|
5月前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
1月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
25 0
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
3月前
|
C语言
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)
|
3月前
|
C语言
【C初阶——指针4】鹏哥C语言系列文章,基本语法知识全面讲解——指针(4)
【C初阶——指针4】鹏哥C语言系列文章,基本语法知识全面讲解——指针(4)