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

数组、指针

---恢复内容开始---

1、数组初始化

  使用花括号对括起来一系列数值来初始化数组。数值之间用逗号隔开,在数值和逗号之间可以使用空格分开。

  int main(void)

  {

    int power[8] = {1, 2, 3, 4, 5, 6, 7, 8};

    .......

  }

  a、如果数组不初始化,数组内的值都是随机的。

  b、如果数组内的值没有全部都初始化,未初始化的值都是0。

  c、可以对数组内的某个指定的元素初始化,未被初始化的值都将被设置为0。

    例如 int attr[6] = { [4] = 3 }; -----即是将数组attr的第5元素的值设置成3.

 

2、为数组赋值

  声明完数组后,可以借助数组的索引(即下标)对数组成员进行赋值。C不支持将数组看做一个整体来进行赋值,也不支持用花括号括起来的列表形式进行赋值(初始化除外)。

  int main()

  {

    int one[4] = {1, 2, 3, 4};       /*正确*/

    int two[4];

    two = one;                          /*不允许*/

    two[4] = one[4];        /*错误*/

    two[4] = {2, 3, 5, 9};      /*不起作用*/

  }

3、数组边界

  使用数组的时候,需要注意数组索引不能超过数组的边界。

4、未初始化的指针

  int *pt;  //未初始化的指针

  *pt = 5;  //可怕的错误

  切记:当创建一个指针时,系统只分配了存储指针本身的内存空间,并不分配用来存储数据的内存空间。

  所以在指针使用之前必须给他赋予一个已经分配的内存空间。例如1、把指针指向一个已经存在的变量 2、用malloc函数申请新的空间。

 5、指针的操作

  1、赋值------把一个地址赋给一个指针。

  2、求值------运算符*可以取出指针指向地址中存的值。

  3、去指针的地址------指针也是有地址和数值的,用运算符&可以取出指针的地址。

  4、将一个整数加给一个指针------即是这个整数乘以指针所指类型的字节数,然后所得结果加上初始的地址上。

  5、求差值------可以求出两个指针间的差值,即是元素之间的距离。

  6、比较------可以使用运算关系比较两个指针的大小,前提是两个具有相同的类型。

 6、保护数组内容

  在编写处理诸如int这样基本类型的函数时,可以向函数传递int数值,也可以向函数传递指向int的指针;通常我们只传递数值,只有需要在函数中修改该值的时候,我们才传递指针。

    对于处理数组的函数,只能传递指针,因为这样更高效。如果传递数组,那么系统需要再申请一份内存传递给函数。

  对形式变量使用const,即是要求函数将传进来的地址指向的值当做常量对待。

  对const的理解:const不是要求原始数组固定不变;只是说明函数在处理数组时,应该把数组当作是固定不变的。

    总之,如果函数想修改数组,那么在声明函数参量时不要使用const;如果函数不想修改数组,那么在声明函数参量时最好使用const。

7、指针赋值和const

  1、将常量和非常量数据的地址赋给指向常量的指针时合法的。也就是说const指针可以指向const类型数据的地址,也可以指向普通类型数据的地址。

  2、只有非常量的数据才能赋给普通指针。也就是说非const指针不能指向const类型数据的地址。

  3、可以使用const声明并初始化指针,以保证指针不会指向别处。也就是说const声明并初始化了的指针,不能再被赋值;这样的指针仍然可用于修改数据,但他只能指向最初赋给他的地      址。

  4、可以使用两个const来创建指针,这样的指针既不能修改指向的地址,也不能修改指针指向的值。

---恢复内容结束---

转载于:https://www.cnblogs.com/mls-ztx/p/5266561.html

相关文章:

  • 架构师速成8.2-架构师要懂产品
  • Javascript设计模式学习之Observer(观察者)模式
  • python用sybase自带的sybpydb模块访问数据库
  • 三种对象传参和ModelDriven的原理
  • netty demo
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • 解决tomcat6部署spring4+mybatisJSP页面产生的500错误,控制台报java.lang.NullPointerException的问题...
  • SQL Server中查看哪些游标未释放
  • 【抄】更改eclipse配置
  • 胜利大逃亡(续)
  • 理解JavaScript中的回调函数
  • hdu 5640 King's Cake(模拟)
  • 2、Python语法基础
  • Python基础教程第二版 6:抽象
  • UnicodeEncodeError: 'ascii' codec can't encode
  • 《Java编程思想》读书笔记-对象导论
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • exports和module.exports
  • Puppeteer:浏览器控制器
  • Redux系列x:源码分析
  • Spring Boot快速入门(一):Hello Spring Boot
  • 从tcpdump抓包看TCP/IP协议
  • 服务器从安装到部署全过程(二)
  • 后端_MYSQL
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 数据科学 第 3 章 11 字符串处理
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 用element的upload组件实现多图片上传和压缩
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 说说我为什么看好Spring Cloud Alibaba
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • 整理一些计算机基础知识!
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #Z2294. 打印树的直径
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $.ajax()参数及用法
  • (1)(1.13) SiK无线电高级配置(五)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Python) SOAP Web Service (HTTP POST)
  • (过滤器)Filter和(监听器)listener
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (十) 初识 Docker file
  • (五)IO流之ByteArrayInput/OutputStream
  • (转) Face-Resources
  • ./和../以及/和~之间的区别
  • .Net FrameWork总结
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .NET中使用Redis (二)