当前位置: 首页 > news >正文

C语言指针和数组梳理

C语言指针和数组梳理

1、指针是什么
  • 1 、 C语言中,指针是一个存储地址的变量,所以本质是一个变量,但是特殊的地方在于是存储的是地址。所以存储地址有什么特别的地方么? 答案是肯定的

  • 在C语言中,存储地址的内存大小是固定的,这主要取决于运行程序的计算机系统的位数(即32位或64位),即int 类型的大小。而指针的占用内存大小自然就设置为 存储地址的内存的大小。

  • 2、 上面所描述,指针是一个保存地址的变量,对比定义一个普通变量和指针(指针变量)的方式。

int  p; //普通变量        
int * P; //指针    
2、指针类型的指针
  • 1、根据上面说的,指针就是一个保存地址的变量。我们生成一个指针的时候,如果是让这个指针保存 ,int数据类型的地址,这个指针就是一个int类型的指针,如果保存的是一个 char数据类型的地址,这个指针就是一个char类型的指针。
  • 所以当一个指针A保存的是另一个指针B的地址,这个指针A就是一个指针类型的指针。
3、普通数组(一维数组)
  • 1、数组是一个变量的集合,更精确一点,是一个相同数据类型的变量的集合。 定义是这样的,数组是一种数据结构,用于在计算机内存中连续存储相同类型的数据。
    比如我们定义一个变量 int a ; 但是现在有10个这种int 类型的变量,放在一个,就组合成了一个数组。 int b[10]; 10个int 类型的数据。
    如果这10个数据不是int 类型,而是指针类型呢,那么就是一个指针数组。如果这个10个数据类型,又是一维数组呢?
4、数组的数组(二维数组)
  • 1、一维数组的数据类型是一维数组,这个就变成了二维数组。
    定义二维数组的方式如下 int [3][4];
5 、数组和指针的关系
  • 1、数组因为是一个变量的集合,C语言中,为了方便取出这些值,数组名这个变量其实里面放的也是地址。 在大多数情况下,数组名在表达式中会被转换成指向数组首元素的地址,即数组名这个变量,保存的是数组首个元素的地址。 我们之前说指针这个变量的特别在于里面存储的是地址 ,现在数组名也是一样,数组名可以当成一个特殊的指针使用。 但是区别在于,数组名这个变量保存的地址是不能改变的,数组名在定义时被分配了一个固定的内存地址,这个地址是数组首元素的地址,并且在数组的生命周期内不会改变。你无法改变数组名所代表的地址,就像你不能改变一个整数常量的值一样但是指针变量可以换一个指。
6 、总结一下数组和指针
  • 1、指针是一个变量,保存一个地址。
    一个 X 型指针,保存一个 X 型地址 。这句话可以这样说,
    一个 X 型指针,指向一个X 型地址。

  • 2、数组名保存一个地址,但是这个地址不可以更换。
    一个 X 型数组变量,保存了一个X 型地址。
    综合以上,一个X型指针可以指向
    一个X型地址,一个X型数组变量。一个X型的指针。

    所以

  • 一个 int 型指针,指向了一个int 型地址, 一个指针类型的指针,指向了一个指针类型的地址。反过来,要想指向一个 数组类型的数组。需要一个数组型的指针。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • opencv之图像轮廓(三)--凸包
  • Unity SRP 可编程渲染管线的基本用法
  • Python——俄罗斯方块
  • 『功能项目』切换职业面板【48】
  • 笔试强训day13
  • MySQL索引-聚簇索引和非聚簇索引
  • Android 11 FileProvider的使用和限制
  • URL的执行流程
  • 【C-项目】网盘(一期,线程池版)
  • react 安装使用 antd+国际化+定制化主题+样式兼容
  • 进程vs线程:高效并发编程的基石
  • fsck 命令:修复文件系统错误
  • AI时代的到来,让英文写作变得简单
  • python常用框架及使用方法
  • Redis的存储原理和数据模型
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • JAVA 学习IO流
  • Java面向对象及其三大特征
  • mongo索引构建
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 彻底搞懂浏览器Event-loop
  • 程序员该如何有效的找工作?
  • 给Prometheus造假数据的方法
  • 回顾2016
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 入手阿里云新服务器的部署NODE
  • 深入浅出Node.js
  • 数据可视化之 Sankey 桑基图的实现
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 终端用户监控:真实用户监控还是模拟监控?
  • 主流的CSS水平和垂直居中技术大全
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​queue --- 一个同步的队列类​
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​香农与信息论三大定律
  • #NOIP 2014# day.1 T2 联合权值
  • #pragma multi_compile #pragma shader_feature
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • %@ page import=%的用法
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)(1.11) SiK Radio v2(一)
  • (12)目标检测_SSD基于pytorch搭建代码
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (BFS)hdoj2377-Bus Pass
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (四)软件性能测试
  • (一)、python程序--模拟电脑鼠走迷宫
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)LINQ之路
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)