假设我们定义一个指针p。那么会经常使用到三个符号:
1,p;
2,*p;
3,&p;
初学者经常会感到很迷茫,到底这三个符号表示什么?

1、p是一个指针变量的名字,表示此指针变量指向的内存地址,如果使用%p来输出的话,它将是一个16进制数。
2、*p表示此指针指向的内存地址中存放的内容,一般是一个和指针类型一致的变量或者常量。
3、&是取地址运算符,&p就是取指针p的地址。

等会儿,怎么又来了个地址,它到底和p有什么区别
区别在于,指针p同时也是个变量,既然是变量,编译器肯定要为其分配内存地址,就像程序中定义了一个int型的变量i,编译器要为其分配一块内存空间一 样。而&p就表示编译器为变量p分配的内存地址,而因为p是一个指针变量,这种特殊的身份注定了它要指向另外一个内存地址,程序员按照程序的需要 让它指向一个内存地址,这个它指向的内存地址就用p表示。而且,p指向的地址中的内容就用*p表示。

再来看一下&P和**P的区别

如上图所示:
假设开辟空间时p被分配3001H、3002H两个位置。则p为2003H,*p为3001H。

(假设开辟空间时p 被分配给了3001H、3002H 两个位置)
int *p;

p=2003H; //则p指向了2003H处,值为30 00
*p=3000H //p所指向的对象的值变为3000H

1.**p的值为多少?

  **p=*(*(p))=*(*(2003H))=*(3000H)=0300H。
故**p即为3000H所指向的对象,值为03 00

2.&&p的值为多少?

 &&p=&(&(p))=&(3001H),&p为获得p的地址即我们前面假设的3001H。再对3001H取址,此时出错了,3001H 是个常数怎么可能有地址呢? !!!

3.*&p的值为多少?

*&p=*(&(p))=*(3001H)=2003H,也就是*&p=p。
//*(3001H)得到3001H所指对象即20 03——注意,
它得到的不是自身哦,有变化

4.&*p的值为多少?

 &*p=&(*(p))=&(3000H),读者可能以为&*p=p,此时出错了,同样的3000H 是个常数怎么可能有地址呢?***p的值为多少?*p=*(*(p))=*(*(2003H)

C语言指针中P、*P、P、**P的区别相关推荐

  1. C语言中易混淆的标识符,C语言指针中易混淆的概念

    C语言指针中易混淆的概念 一.数组指针与指针数组的区别 考虑数组的指针的时候我们要同时考虑类型和维数这两个属性.换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类. ...

  2. C语言中指针与数组的区别,C语言 指针与数组的详解及区别

    C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[ ...

  3. C语言指针中带星号与不带星号的区别以及何时使用。

    首先,我们直接看一段代码: #include<stdio.h> int main() {int a; //声明变量 a : int *pa = &a; //声明int类型的指针 p ...

  4. c语言指针中冒号的用法,在c中使用冒号后面的类名

    这是从黑莓10 helloworld程序中提取的头文件. #ifndef ApplicationUI_HPP_ #define ApplicationUI_HPP_ #include namespac ...

  5. C语言指针中 *p 和 p 的区别

    首先要知道如何定义一个指针变量,即 int *p; 这个时候我们说p是一个指针变量,我们可以对它进行赋值,即 p = &a;(当然a是一个int型的变量,需要提前定义,即 int a;) 那么 ...

  6. c语言 overflow_一文读懂:C语言编程中“堆”和“栈”的七大区别

    对于编程初学者来说会接触到一些难以理解的名称,比如堆(heap).栈(stack).堆栈(stack)等,初学开发过程中往往让人混淆不清.今天我们来谈谈堆和栈的具体区别,来帮助初学者理清思路. 堆和栈 ...

  7. C语言指针 *p++和*++p及++*p的区别

    今天复习了一下C语言的指针题目,发现在很多代码结果题目中都出现了表达式*p++.**++p和++*p,而这几个表达式特别容易混淆. 那么通过什么方式区分他们呢,答案就是运算符优先级. *p++ ++和 ...

  8. c语言中指针中 - 和 。的区别?

    c语言中指针中 -> 和 .的区别? 例子1:比如有如下结构 typedef strut node{ int data;   strut node * next; } ListNode; Lis ...

  9. 在c语言中下面指针,c语言指针的知识点

    在计算机科学中,指针 ***Pointer***是编程语言中的一个对象,利用地址,它的值直接指向***points to***存在电脑存储器中另一个地方的值.下面是小编为大家整理的C语言的指针知识点总 ...

最新文章

  1. ANSI编码和标准代码页(code page)
  2. python编程小学生学好吗-连小学生都在学的Python,究竟就业方向有哪些?
  3. 电商那些年,我摸爬打滚出的高并发架构实战精髓(续)
  4. turnitin时间
  5. python和javascript哪个好_JavaScript与Python:主要区别
  6. 《LINUX3.0内核源代码分析》第二章:中断和异常 【转】
  7. HDU 2571 命运
  8. [大数据]PySpark原理与基本操作
  9. Linux操作系统六大优点
  10. 一般java,【面试题】java一般
  11. rocketMq 顺序消费
  12. C Primer Plus 第13章 文件输入/输出 13.11 编程练习答案
  13. 记事本编写java_如何使用记事本编写java程序
  14. windows对计算机硬件有要求吗,win10对硬件有什么要求_win10硬件配置有哪些要求
  15. 马尔可夫链预测模型的应用——以预测降雨量为例
  16. 数论—乘法逆元—费马小定理
  17. ERNIE-ViLG文心跨模态AI绘画大模型——中文版stable-diffusion
  18. 10岁自闭症小孩,妈妈带她几次粪菌移植治疗后,自闭行为有所改善
  19. AceEditor使用小结
  20. BUUCTF·[WUSTCTF2020]大数计算·WP

热门文章

  1. 2019计算机学院年会主持稿,2019年会的主持词
  2. java线程 模拟窗口售票
  3. 人行征信第三张报告的信息提取
  4. 利用语义分割算法做指针式仪表的读数识别
  5. 计算机硬盘显示恢复出厂设置,如何对磁盘进行分?
  6. python中3or5什么意思_解析python中and与or用法
  7. 机器学习(周志华著)习题 第03章 线性模型
  8. java手电筒_android--超级手电筒的开发记录
  9. Java用普里姆算法(prim)解决修路最短路径问题
  10. 循环机换变速箱油教程_标致308循环机更换自动变速箱油图文教程