一、指针变量的定义
变量的指针就是变量的地址。我们可以定义一个指向 变量(普通变量) 的 指针变量。这种指针变量,我们在定义的时候,会引入一个 * ,用于在定义的语句中表示“这是一个指针变量”。
一般形式
类型标识符   *标识符                           标识符:就是指针变量名字
int i,j;     //普通变量
float k;   //普通变量
int  *mypoint1,*mypoint2;    //定义两个指针变量,这两个指针变量 是指向整型变量的。
    //指针变量定义时,变量名前面有个 *,这个是和普通变量最明显的区别。
float *pm3;     //指向实型变量的指针
float *pm4;     //指向实型变量的指针
如何让 整形指针变量 指向一个 整型变量    【整型指针变量只能指向整型变量,实型指针变量只能指向实型变量】
可以用赋值语句使一个整型指针变量指向一个整型变量(普通变量)
mypoint1= &i;    //&地址符   等价于 mypoint1 指向了 i
mypoint2 = &j;   //等价于 mypoint2  指向了 j
说明:
(1)“定义”指针变量的时候,指针变量前面是*”号的,表示这是正在“定义一个指针变量”。
但是,用指针变量的时候,指针变量名前面是没有 * 号的,所以指针变量名是 mypoint1,mypoint2,而不是 *mypoint1,*mypoint2.
(2) 一个指针变量只能指向同一个类型的变量(普通变量)
    pm3=&k;
二、指针变量的引用
牢记:指针变量中只存放地址。不要将一个整型变量赋值给一个指针变量;
mypoint = 4;   //这样是错误的,mypoint1是个指针变量,而4是个整数。
和指针变量相关的运算符有两个:
(1) &:取地址运算符。
(2) *:指针运算符(间接访问运算符),定义指针变量的时候,用到 * ,这个叫做指针运算符。
但是,如果 * 不出现在指针变量定义的场合,而且也不是一个乘法运算符,* 依旧是指针运算符,只不过代表的是该指针变量所指向的变量。
int a,b;
int *p1,*p2;   //这里这个 * 表示这两个变量是指针变量。
a=100;
b=200;
p1=&a;    //把变量 a的地址赋给了p1, ****现在p1指向了a
p2=&b;  //把变量 b的地址赋给了p2, ****现在p2指向了b
printf("%d,%d\n",a,b);
printf("%d,%d\n",*p1,*p2);   //*p1 指向的变量是 a; *p2 指向的变量是 b。 *p1=a=100;*p2=b=200;
//* 指针运算符 不用于定义指针变量的场合时,代表的是它所指向的变量
特殊写法解析
(a) &*p1:&是取地址运算符,*是指针运算符,这两个运算符优先级相同,但是这两个运算符都是从右到左结合的;
因此先看 *p1 ,*p1代表的是p1所指向的变量,就是a,那么再执行&运算,就是 &*p1 等价于 &a;又因为 &a 它本身不就是 p1,所以 &*p1 等于什么也没有干。p1=&*p1; ==>p1=&a
(b) *&a:&是取地址运算符,*是指针运算符,这两个运算符优先级相同,但是这两个运算符都是从右到左结合的;
因此先看 &a ,也就是p1,那么再执行 * 运算,*&a=*p1,*p1代表的是p1指向的变量,所以也就是a,所以 *&a ==> a
(c) (*p1)++:*p1 是 a,所以(*p1)++ 就是 a++,这里a++就是100+1=101。
(d*p1++:因为 ++和 * 同级,又是从右到左,所以 *p1++ =*(p1++); 但是注意,这里 p1是指向 变量a(p1保存变量a的地址),然而 p1++,就是内存地址+1,因为 p1是整型(占4个字节),所以 p1++就要跳4个字节。
例如:a 的内存地址是:0x0031fb4,p1++ 等价于 0x0031fb4+4= 0x0031fb8;
总述:地址是个数字,地址自加1是什么意思呢?
如果普通整型变量i,那么i++,i如果是4,那么i++是5,就是i这个变量对应的内存中的内容+1;
同理,指针变量自加 1,也肯定是这个指针变量中的内容要自加 1,但是这种本来是自加1的操作,对于指针来说就不一定是自加 1,自加几,取决于该指针变量所指向的变量类型,如果p1指向的是整型变量,那么 p1++的内容要加 4;因为 int 是4个字节,p1++ 意味着p1指向 i 之后的变量,要完整跳过4个字节,所以p1++后内存内容如下图所示:
         p1++后的结果: 
*(p1++)不再指向 a,他就指向 a后边的内存去了,这段内存就不知道是谁的,所以*p1++这个动作非常危险,因为你会改变不属于你的内存。
例题:
int *pmax,*pmin,*p,a,b;
a=5;
b=8;
pmax=&a;
pmin=&b;
if(a<b)
{
   p=pmax;          //现在p 指向 a   (就是p 保存 a 的地址了)
   pmax=pmin;       //现在pmax 指向 b(就是变成 pmax 保存 b 的值,把最大数的地址保存到pmax)
   pmin=p;          //pmin 指向 a    (就是变成 pmin  保存 a 的值,把最小数的地址保存到 pmin)
}
printf("a=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*pmax,*pmin);

C语言 变量的指针和指向变量的指针变量相关推荐

  1. C语言 数组的指针和指向数组的指针变量

    一.回顾二维数组和多维数组的概念 int a[3][4];  //二维数组 int a[2][3]4];  //多维数组 二.指向多维数组的指针和指针变量的探究 可以把a看成是一个一维数组,这个一维数 ...

  2. 字符串的指针和指向字符串的指针变量

      引自:http://s319.dlut.edu.cn/educ/83.htm §8.4 字符串的指针和指向字符串的指针变量 8.4.1 字符串的表现形式 在C程序中,可以用两种方法实现一个字符串. ...

  3. 深入浅出C语言:(三)C 语言数组指针(指向数组的指针)

    目录 一.C 语言数组指针(指向数组的指针) 二.C 语言字符串指针(指向字符串的指针) 三.C 语言指针数组(数组每个元素都是指针) 四.二维数组指针(指向二维数组的指针) 五.指针数组和二维数组指 ...

  4. 常指针和指向常量的指针

    最近在学习引用,有一些学习心得,记录如下: 1:引用是变量的别名 int a; int b&=a; 要注意引用只有声明,而没有定义,并且引用必须在声明的时候进行初始化,一旦与某个变量关联起来, ...

  5. 辨析 const指针 和 指向常量的指针

    辨析以下几种指针p的定义. int tmp = 5;int *p = &tmp; const int *p = &tmp; int const* p = &tmp; int * ...

  6. 超详细的const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...

  7. [C++基础]018_常量指针和指向常量的指针

    先来看一下什么是常量指针,什么是指向常量的指针吧! 1. 常量指针定义 1 int * const ptr = new int(); 2. 指向常量的指针 1 const int* ptr; 上面已经 ...

  8. const指针和指向常量的指针

    先看下面六种写法: 1. const int p;2. const int *p;3. int const* p;4. int * const p;5. const int * const p;6. ...

  9. 区分指向数组元素的指针、指向数组的指针、指针数组

    区分指向数组元素的指针.指向数组的指针.指针数组 指向数组元素的指针 这类指针比较常见,例如 int a[3] = {1, 2, 3}; int *p; p = a;//将数组的地址(也即数组首元素的 ...

  10. const指针和指向const的指针

    今天在看项目代码时,发现竟然可以给有const修饰的指针赋值,按道理的话,const修饰的不是常量吗?常量应该是初始化之后就不能再修改才对.对于这个问题,我大致的研究了一下. 参考const 指针与指 ...

最新文章

  1. 各浏览器驱动下载地址
  2. jQuery之动画效果
  3. 作文 —— 诙谐、幽默、调侃、批判
  4. android kernel控制台初始化过程
  5. ubuntu 安装 TensorFlow、opencv3 的 tips
  6. vue中this.init用法_Vue中的this.$options.data()和this.$data用法说明
  7. IOS 控制器View的创建方式(方式的优先级 、view的延迟加载)
  8. Teamcenter 入门开发系列问答(3)
  9. 设计模式(Design pattern—
  10. 解决问题--java.lang.ClassNotFoundException -- redis抛出
  11. java远程方法调用(rmi)--好_java 远程方法调用(RMI)
  12. wpe手机中文汉化版下载_wpe中文3.0专业版
  13. 主题插件WordPress淘宝客ZZDGM主题Upanel插件使用补充
  14. IOT物联网技术架构_物联网系统架构正式上架
  15. USACO 2021 January Contest, BronzeProblem 2. Even More Odd Photos题解
  16. python 计算gdp_菜鸟笔记Python3——数据可视化(三)世界GDP分析
  17. 阿里云安全中心之漏洞修复最佳实践
  18. 雅可比(Jacobi)及高斯-塞德尔(Gauss_Seidel)迭代法求解线性方程组的matlab现实
  19. python IO模块【一】:IO类
  20. 安卓手机软件开发_这款安卓神器,让你下片更轻松!千万别滥用

热门文章

  1. 使用接口根据关键词取视频列表详情
  2. ERP-非财务人员的财务培训教(三)------公司/部门预算编制与评价
  3. php一键安装的环境包,php环境搭建的一键安装包有哪些?
  4. 自建一个本地dns归属地查询系统
  5. linux命令简化,Linux ls 命令实现(简化版)
  6. linux如何删除文件
  7. [OpenCV实战]10 使用Hu矩进行形状匹配
  8. 从全国首日票房破百万看零售商家的线下营销
  9. em算法怎么对应原有分类_EM算法
  10. 2022软件工程师薪资报告出炉!