C语言指针中P、*P、P、**P的区别
假设我们定义一个指针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的区别相关推荐
- C语言中易混淆的标识符,C语言指针中易混淆的概念
C语言指针中易混淆的概念 一.数组指针与指针数组的区别 考虑数组的指针的时候我们要同时考虑类型和维数这两个属性.换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类. ...
- C语言中指针与数组的区别,C语言 指针与数组的详解及区别
C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[ ...
- C语言指针中带星号与不带星号的区别以及何时使用。
首先,我们直接看一段代码: #include<stdio.h> int main() {int a; //声明变量 a : int *pa = &a; //声明int类型的指针 p ...
- c语言指针中冒号的用法,在c中使用冒号后面的类名
这是从黑莓10 helloworld程序中提取的头文件. #ifndef ApplicationUI_HPP_ #define ApplicationUI_HPP_ #include namespac ...
- C语言指针中 *p 和 p 的区别
首先要知道如何定义一个指针变量,即 int *p; 这个时候我们说p是一个指针变量,我们可以对它进行赋值,即 p = &a;(当然a是一个int型的变量,需要提前定义,即 int a;) 那么 ...
- c语言 overflow_一文读懂:C语言编程中“堆”和“栈”的七大区别
对于编程初学者来说会接触到一些难以理解的名称,比如堆(heap).栈(stack).堆栈(stack)等,初学开发过程中往往让人混淆不清.今天我们来谈谈堆和栈的具体区别,来帮助初学者理清思路. 堆和栈 ...
- C语言指针 *p++和*++p及++*p的区别
今天复习了一下C语言的指针题目,发现在很多代码结果题目中都出现了表达式*p++.**++p和++*p,而这几个表达式特别容易混淆. 那么通过什么方式区分他们呢,答案就是运算符优先级. *p++ ++和 ...
- c语言中指针中 - 和 。的区别?
c语言中指针中 -> 和 .的区别? 例子1:比如有如下结构 typedef strut node{ int data; strut node * next; } ListNode; Lis ...
- 在c语言中下面指针,c语言指针的知识点
在计算机科学中,指针 ***Pointer***是编程语言中的一个对象,利用地址,它的值直接指向***points to***存在电脑存储器中另一个地方的值.下面是小编为大家整理的C语言的指针知识点总 ...
最新文章
- ANSI编码和标准代码页(code page)
- python编程小学生学好吗-连小学生都在学的Python,究竟就业方向有哪些?
- 电商那些年,我摸爬打滚出的高并发架构实战精髓(续)
- turnitin时间
- python和javascript哪个好_JavaScript与Python:主要区别
- 《LINUX3.0内核源代码分析》第二章:中断和异常 【转】
- HDU 2571 命运
- [大数据]PySpark原理与基本操作
- Linux操作系统六大优点
- 一般java,【面试题】java一般
- rocketMq 顺序消费
- C Primer Plus 第13章 文件输入/输出 13.11 编程练习答案
- 记事本编写java_如何使用记事本编写java程序
- windows对计算机硬件有要求吗,win10对硬件有什么要求_win10硬件配置有哪些要求
- 马尔可夫链预测模型的应用——以预测降雨量为例
- 数论—乘法逆元—费马小定理
- ERNIE-ViLG文心跨模态AI绘画大模型——中文版stable-diffusion
- 10岁自闭症小孩,妈妈带她几次粪菌移植治疗后,自闭行为有所改善
- AceEditor使用小结
- BUUCTF·[WUSTCTF2020]大数计算·WP