当前位置:   article > 正文

C语言中“指针”和“指针变量”的区别,以及如何区分 * 得用法_指针变量和指针所指的变量

指针变量和指针所指的变量

首先说一下写这篇文章的原因,在学习实用算法课程期间,发现以前学习的指针相关知识还有偏差,所以在CSDN上面找了挺多相关知识,基本弄明白了怎么回事,以下三篇文章对我帮助很大:

https://blog.csdn.net/synapse7/article/details/10260339

https://blog.csdn.net/qq_21583681/article/details/78572009

https://blog.csdn.net/noob_f/article/details/48896505

https://blog.csdn.net/u011555996/article/details/79496203

https://wenku.baidu.com/view/625aaff7b7360b4c2f3f6492.html

https://blog.csdn.net/wwx2ln/article/details/79781261

首先需要明确一个基本概念:在C语言中 *  与  &   这两个符号在不同情况下所表达的含义是不一样的

一、首先我们要对一些潜在的计算机只是有一定的了解:(或许这就是吃虫子和吃饲料的区别吧,这里有篇B站说的挺有道理与大家共勉https://www.bilibili.com/video/av30153849

我们再定义一个变量 a 时,变量 a 本质上代表一个存储单元,CPU通过该存储单元的地址访问该存储单元中的数据。所以a本来代表两个值:存储单元的地址和储单元中的数据。于是就有了二异性。为了消除这种二义性,C语言规定a表示存储单元中的数据,&a表示存储单元的地址。a存储单元中的数据可以是一个普通数值,也可以是另一个存储单元的地址,比如:a = &b; 语句就是将b的存储单元的地址存入a存储单元中。

在C语言中  *  和  &   两个符号在不同情况下的含义是不一样的

1.指针的定义和初始化

(1)&a: 取地址符(单目运算符):在此时,&的含义是去变量a的地址

         a&b: 按位与(双目运算符):在此时 & 是一个单目运算符

         *的三种用法:

         (1) 乘法:3*4=12:这种情况是作为算术运算符出现

         (2) int *p=&a; //定义指针变量:此时为初始化指针变量,int *p定义了一个指向int类型指针p(我们使用*符号把p声明为指针),并初                                                             始化p使其指向int类型的变量a,这里&num中的&是取地址操作符,当&作用于一个对象上时,它返                                                               回了该对象的地址,

         (3) *p //解引用 :在这里 * 的作用是解引用(这里解引用的意思可不太好理解,正确的说法应该是   *运算符给出指针变量p中                            存储的地址上存储的值(或者说是给出指针p指向的地址上存储的值))由于在C语言中所有的变量都需要先定义声明后使用,                    要求p对应的存储单元中的数据一定是另一个存储单元的地址,于是,*a表示另一个存储单元中的数据。

              (这里*操作符为解引用操作符,它返回指针p所指的对象(左值)。

               我们可以对*p赋值(对左值赋值),从而改变p所指的地址上所保存的值)

(2)int *p=&a; //定义整型指针变量(p)保存整型地址值

         *p=100; //间接访问符(解引用)通过p间接访问变量a的值并把a的值赋为100 

(3)int v2=0,*q=&v2;   等价于  int v2=0,*q;  q=&v2;

 

关于“指针”“指针变量”比较严格的说法是这样的:
系统为每一个内存单元分配一个地址值,C/C++把这个地址值称为“指针”。如有int i=5;,存放变量i的内存单元的编号(地址)&i被称为指针。
“指针变量”则是存放前述“地址值”的变量,也可以表述为,“指针变量”是存放变量所占内存空间“首地址”的变量(因为一个变量通常要占用连续的多个字节空间)。比如在int i=5;后有一句int *p=&i;,就把i的指针&i赋给了int *型指针变量p,也就是说p中存入着&i。所以说指针变量是存放指针的变量。
有一个事实值得注意,那就是有不少资料和教科书并没有如上区分,而是认为“指针是指针变量的简称”,如对int *p=&i;的解释是:声明一个int *型指针p,并用变量i的地址初始化;而严格说应该是声明一个int *型指针变量p才对。所以有时看书要根据上下文理解实质,而不能过于拘泥于文字表述。

 

https://blog.csdn.net/u014774853/article/details/52877655   char** p指针的指针意思详解

https://blog.csdn.net/txj236/article/details/52325723    https://blog.csdn.net/wofreeo/article/details/80604917    解引用的通俗解释

理解不对的地方还请各位不吝指出,我会一一回复的

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/sysmno/article/detail/63239
推荐阅读
相关标签
  

闽ICP备14008679号