一、指针

概念:当定义一个变量时,系统会为这个变量分配内存,比如,int a,系统会给变量a分配一块内存,大小为in型的4个字节,而且每个字节都会有一个编号,这个编号就是地址,这个编号是计算机抽象出来用于访问数据的,实际上为一个数字。当计算机需要访问数据时,会先找到它的地址,再来获取改地址里的数据。比如,int a=1;当计算机需要printf("%d",a)时,它会先找到a的地址(比如0x000001),然后找到a的值为1。而一个变量的地址就称为该变量的指针。指针就是一个地址,它在计算机中是一个内存单元的编号,一个十六进制数。

二、指针变量:c语言有很多种变量,每种变量都会储存一种数据,而指针变量就是专门来储存指针的变量,如定义一个指针变量p,p是一个指向int型数据的指针,即p可以存int型变量的地址。

int *p;

1.这里有两种访问数据的方式:

  1. 直接访问:就像上面所说,计算机先找到该变量的地址,再找到该变量的值
  2. 间接访问:与第一种不同,这里要用到两个变量,用一个变量2来储存变量1的地址,然后通过变量2来找到变量1的值

在函数传参时,在函数体里只改变型参的值,对实参不会造成影响,这里通过地址的传递可以对实参造成影响

*p1和*p2的值虽然都是2和1,但是原理不同。

在swap2函数里,*p1是通过b的地址找到了b的值,而此时a和b的值并没有交换所以*p1是2,*p1也是这样。

在swap1函数里,p1和p2的值(p1和p2的值是a和b的地址)没有改变,但在上面已经交换了a和b的值,所以*p1通过a的地址找到a的值为2。

2.指针的大小:指针的大小和指针本身没有关系,这是由CPU运行模式的寻址位数决定的

#include<stdio.h>
#include<windows.h>
int main()
{int a;int *p1;float *p2;double *p3;char *p4;printf("sizeof(p1):%d\nsizeof(p2):%d\nsizeof(p3):%d\nsizeof(p4):%d\n",sizeof(p1),sizeof(p2),sizeof(p3),sizeof(p4));system("pause");return 0;
}

输出结果:

可以看出无论是int型指针还是char型指针,大小都是4个字节。

三、二级指针

1.二级指针就是指针的指针,也就是说,一级指针变量用来存放变量的地址,但一级指针变量也是一个变量,它也有自己的地址,所以二级指针就是存放一级指针的地址的指针。

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

  1. c语言指针访问 静态变量_使用C中的指针访问变量的值

    c语言指针访问 静态变量 As we know that a pointer is a special type of variable that is used to store the memor ...

  2. c语言位向量机伞_一文读懂C语言精华-指针变量和指向指针的指针

    1978年贝尔实验室正式发表C语言,受到众多IT从业者的热捧,即使41年过去了,C语言仍然牢牢占据最受欢迎编程语言前二的位置,许多人的程序开发之路也是从C语言开始的. 编程语言受欢迎排名 C语言简洁紧 ...

  3. 翁恺老师C语言学习笔记(十)指针_指针变量就是记录地址的变量

    指针变量就是记录地址的变量 scanf函数 · 如果能够将取得的变量的地址传递给一个函数,能否通过这个地址在那个函数内访问这个变量 · scanf("%d", &i) · ...

  4. c语言 乘号 指针 避免,C语言指针篇(一)指针与指针变量

    指针 1. 什么是指针? 2. 指针可不可怕? 3. 指针好不好玩? 4. 怎么学好指针? C语言是跟内存打交道的语言,指针就是内存地址.指针无处不在,指针并不可怕,相反,等你学到一定程度后,会有一种 ...

  5. c语言两个指针变量不可以,2.C语言指针变量

    # 2.C语言指针变量 变量的指针就是变量的地址.存放变量地址的变量是指针变量.即在C语言中,允许用一个变量来存放指针,这种变量称为指针变量.因此,一个指针变量的值就是某个变量的地址或称为某变量的指针 ...

  6. 一文搞懂C语言如何用指针来代替变量和数组进行数据的存储

      众所周知,指针的用法最常见的无外乎两种,一种是用指针来指向变量的内存地址,通过操控指针进而可以间接的操控变量.另外一种是把指针当成变量来使用,像变量一样可以存储数据.数组也是类似的道理,因为数组实 ...

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

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

  8. 指针与指针变量的区别(C语言)

    提示:本章主要谈及个人对C语言指针和指针变量的理解 文章目录 前言 一.指针是什么? 二.指针变量是什么? 三.知识拓展 总结 前言 指针是C语言中的一个很重要的concept,掌握指针的应用,可以使 ...

  9. C语言指针与指针变量

    目录 一.指针与指针变量 1.地址 2.指针与指针变量的介绍 二.指针变量的定义与引用 1.变量的存取方法 2.指针变量的定义 3.指针变量的赋值 4.指针变量的引用 一.指针与指针变量 1.地址 在 ...

  10. c语言指针赋值指针变量赋值吗,C语言_指针变量的赋值与运算,很详细

    指针变量的赋值 指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值.未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机.指针变量的赋值只能赋予地址, 决不能赋予任何其它数据 ...

最新文章

  1. Java Daemon线程
  2. HDU4389(数位DP)
  3. 程序员在网吧写代码被暴打一顿!
  4. Java中的Memento设计模式-示例教程
  5. 前端学习(2002)vue之电商管理系统电商系统之绘制商品分类的级联选择器
  6. 正则表达式来判断Sql语句中Select到from之间使用了*而不是字段名
  7. ROS入门笔记(七):详解ROS文件系统
  8. spark入门_[大数据之Spark]——快速入门
  9. 11.9 noip模拟试题
  10. 福大软工1816 - 第四次作业(团队展示)
  11. 用自定义IHttpModule实现URL重写 1
  12. 计算机无法添加打印机,无法添加打印机,教您无法添加打印机怎么办
  13. php视频转码hls,GitHub - wanglimeng/ffmpeg-demo: 使用 ffmpeg 实现视频转码。
  14. Browser-Solidity的本地安装及使用介绍
  15. 《复杂网络分析》习题及自我解答
  16. 2011-12-21的告别信
  17. 团队形成的要经历的5个阶段
  18. Win10卸载OneDrive
  19. linux aio进程简介,Linux AIO机制
  20. 机考怎么作弊_电脑考试怎么作弊

热门文章

  1. knx智能照明控制系统电路图_can总线智能家电 knx智能照明控制系统
  2. 谷歌-adblock插件下载后的使用(国内无需fan墙)
  3. php mysql敏感词_PHP敏感词处理
  4. Appium下载安装与配置
  5. Mysql查询指定数据库某个表的所有字段
  6. java 8 64_java8离线安装包64位
  7. 路畅安卓最新固件升级_路畅车载导航系统刷机-路畅导航系统刷机固件大全下载最新完整版-《百度网盘下载》西西软件下载...
  8. SQL Server【获取当前时间】
  9. mac idea 快捷键
  10. python识别文字软件_使用Python和大漠插件进行文字识别含软件源码