一,指针的概念

指针也就是内存地址,指针变量是用来存放内存地址的变量,在同- -CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变因数据的类型不同,所占用的存储空间长度也不同。

1,内存地址

一个内存地址 =  一个内存单元 = 一个字节。

位的单位是bit,字节的单位是byte。1byte=8bit,1字节=8位。

内存地址常用的单位: kb,mb、gb、tb、pb

在程序执⾏所有内容都存储在内存中,每⼀个字节存储单元都分配了⼀个编 号,把这个内存编号叫做地址(内存地址)

2,变量

变量就代表⼀个数据,代表存储在内存空间中某个地址中的数据内容, 在内存中变量的数据内容也是根据地址来存放的。

常见的变量在内存占用内存地址大小:

类型 大小
short 2
int 4
char 1
float 4
double 8

3,变量的存储

一个变量的存储,先从内存开辟一个类型大小的空间(int类型4个字节大小),在让变量指向这篇空间,即就是这片空间属于这个变量,再在这片空间中存储你要存储的数值。

二,指针变量

⽤⼀个变量来存储地址----这种存储地址的变量就叫做 指针。

指针就是存储另⼀个变量的内存地址的⼀种数据类型,即指针的内容就是另 ⼀个变量的内存地址。

1,指针变量的定义和赋值

指针的不同形式:

1.int p; //这是一个普通的整型变量

2.int *p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以P是一个返回整型数据的指针

3.int p[3]; //首先从P 处开始,先与[]结合,说明P 是一个数组,然后与int 结合,说明数组里的元素是整型的,所以P 是一个由整型数据组成的数组

4.int *p[3]; //首先从P 处开始,先与[]结合,因为其优先级比*高,所以P 是一个数组,然后再与*结合,说明数组里的元素是指针类型,然后再与int 结合,说明指针所指向的内容的类型是整型的,所以P 是一个由返回整型数据的指针所组成的数组

5.int (*p)[3]; //首先从P 处开始,先与*结合,说明P 是一个指针然后再与[]结合(与"()"这步可以忽略,只是为了改变优先级),说明指针所指向的内容是一个数组,然后再与int 结合,说明数组里的元素是整型的.所以P 是一个指向由整型数据组成的数组的指针

6.int **p; //首先从P 开始,先与*结合,说是P 是一个指针,然后再与*结合,说明指针所指向的元素是指针,然后再与int 结合,说明该指针所指向的元素是整型数据.由于二级指针以及更高级的指针极少用在复杂的类型中,所以后面更复杂的类型我们就不考虑多级指针了,最多只考虑一级指针.

三,指针的运算

1.px表⽰指针变量 +(加法): px + n:指针px向地址增⼤的⽅向移动n个数据(指针指向的数据类型) ⼤⼩的地址 如: int * px = 0x10 px + 5 == 0x10 + sizoef(int)*5 = 0x10 + 0x14 == 0x24

2.-(减法): px - n:指针px向地址减⼩⽅向移动n个数据⼤⼩的地址 如: double * px = 0x30 px - 3 = 0x30 - 3*sizeof(double) = 0x30 - 0x18 = 0x18 特殊: px1 - px2:指针减指针,指两个地址间间隔多少个数据 如: double * px1 = 0x10, *px2 = 0x20; px2 - px1 = (0x20 - 0x10)/sizeof(double) = 0x10 / 8 = 2

3.指针变量没有乘法和除法。

基于Linux的c语言知识相关推荐

  1. 基于linux的c语言版本的俄罗斯方块

    基于linux的c语言版本的俄罗斯方块 文章目录 基于linux的c语言版本的俄罗斯方块 前言 一.前期准备 二.使用步骤 1.创建俄罗斯方块DATA库 2.函数声明 3.创建时钟定时器 4.游戏区域 ...

  2. linux系统c 如何使用教程,基于Linux操作系统的C语言编译和调试方法解析

    摘 要:文章先介绍了GCC编译器相关内容,包括GCC编译程序和GCC编译选项,随后介绍了GDB调试程序相关内容,包括GDB具体操作和GDB基础命令,最后介绍了C语言编写中的注意事项,希望能给相关人士提 ...

  3. 基于Windows10基于Linux的C语言笔记Ⅱ

    WHAT YOU NEED: 安装 WSL 1 的 Win 10 或是 Linux: GNU 的 C/C++ 编译器(gcc): vim/vi.nano等编辑器. (或者你有一个自己熟悉的系统与IDE ...

  4. 基于Linux用C语言实现TCP半双工通信和UDP半双工通信

    文章目录 TCP协议/UDP协议介绍 三种通信方式 实现TCP半双工通信 所用到的结构体与函数 源代码 运行结果 实现UDP半双工通信 源代码 运行结果 参考文章 TCP协议/UDP协议介绍 TCP/ ...

  5. 基于linux用C语言编写的局域网通信软件(在ubuntu上正常运行)

    /************************************************************ 去年学C语言socket通信时花三天时间写的. 功能 A,私聊 B,群聊,C ...

  6. 基于Windows10基于Linux的C语言笔记Ⅰ

    这玩意儿就是自己的学习笔记,不过,也可以用来入门学习C语言.However,你需要: 学习C语言兴致, Windows10(或者你有一台Linux系统的电脑), 会用vim/vi.nano或者(其实会 ...

  7. C语言运行超过运行限制,程序中的一些限制(基于Linux系统C语言)

    今天突然想起来几个问题,在程序运行起来时,存在一些限制: 1,数组的长度(成员的个数)存在限制!(数组定义的空间大小) 2,一个进程里打开的文件数. 3,一个文件的名字的长度. 4,一个进程里创建线程 ...

  8. 操作系统大作业 基于Linux的模拟进程调度算法 运用c++语言编程 在VMware虚拟机里 centos 亲自写亲自测试 代码 说明书

    发布文章 博文管理我的博客退出 Trash Temp 操作系统大作业 基于Linux的模拟进程调度算法 运用c++语言编程 在VMware虚拟机里 centos 亲自写亲自测试 代码 说明书 @[TO ...

  9. ACL 2019开源论文 | 基于图匹配神经网络的跨语言知识图对齐

    作者丨王文博 学校丨哈尔滨工程大学硕士生 研究方向丨知识图谱.表示学习 动机 在本篇文章之前,跨语言知识图谱对齐研究仅依赖于从单语知识图谱结构信息中获得的实体嵌入向量.并且大多数研究将实体映射到低维空 ...

最新文章

  1. winpython使用教程-如何使用Python自动控制windows桌面
  2. Linux分支代码必须公开吗,linux – 当拉出不同的分支时,让“git pull”请求确认...
  3. python椭圆拟合_opencv python 轮廓特征/凸包/外接矩形/外接圆/拟合矩形/拟合直线/拟合圆...
  4. spring mvc学习(2):spring jar包下载
  5. android fragment 管理器,Android Fragment 與 Fragment管理器
  6. RFI to RCE challenge
  7. linux实现字符火焰动画,linux flamegraph火焰图使用
  8. jsp连接mysql----------第一篇技术类文章
  9. c语言高效编程pdf,C语言高效编程的四大绝招
  10. 维修电工技师技能实训考核装置QY-W05
  11. linux 内核态 抓屏代码,Android screencap截屏指令
  12. 深入RxJava2 源码解析(一)
  13. LiteOS + PahoMQTT 连接华为云
  14. socket编程到底是什么?
  15. 制作京东快递查询 css制作三角形
  16. 一些广州音字的输入方法
  17. 独家整理: 六款高质量的办公资源网站,疯狂提高你的工作效率
  18. vscode让代码敲出火焰
  19. PuTTY 下载安装教程
  20. 宏碁暗影骑士设置u盘启动教程

热门文章

  1. vscode快速格式化方法
  2. 注册CSDN之后的第一条PIAO客
  3. 小米开源AI框架mace编译构建
  4. JVM学习笔记之StringTable
  5. Android apk无法手动install
  6. BUAA 735 晴天小猪来刷人人
  7. Webpage not available err_cleartext_not_permitted
  8. 服务器购买网站vuter,vscode中安装开发html5中需要的插件
  9. KPCB:2013年互联网女皇互联网趋势报告–解读版
  10. ctfshow mics49