个人对“数组和指针”的重点笔记(下)

  1. 关于变长数组(VLA),即数组的一种不一样的表现形式,通过使用变量表示数组的维度。如:int a=4,b=5;double c[a][b];//这就是一个变长数组。变长数组必须是自动存储类别,这就意味着无论在函数中声明还是作为函数的形参声明,都不能使用static或者extern存储类别说明符,而且不能在声明中初始化它们,而且在函数形参中声明时,要先对两个维度做声明,然后再声明数组。
  2. 关于字符串字面量:要在字符串字面量中使用双引号,必须再双引号钱面加上反斜杠’\‘,如:”run ,stop,\”run"。当对数组做字符串初始化时,可以这样赋值a[20]="sdjlkfjsdkfsasjdl",还可以a[20]={'a','d','e','t',.............'\0'}注意后面对空字符,没有这个空字符,这就不是一个字符串,而是一个字符数组。而且sizeof()测长度时会包含这个空格,而 strlen则不会。
  3. 对于数组名和指针名的区别:数组名是不能更改的,它是一个常量,不能做左值,可以进行++a这样的操作,数组的元素是变量,数组名不是变量。但是指针名是可以进行更改的,指针名是变量,可以做左值
  4. 此外,建议再把指针初始化为字符串字面量时使用const限定符,这是因为,对于当前的c而言,使用指针修改这个字符串是未定义的,即char *p="jisdfsa"; p[2]=w';是未定义的 。因此,如果打算修改字符串,就不要用指针指向字符串字面量。
  5. 如果创建数组来访问多个不同的字符,可以通过这两种办法:1.const char *a[3]={"asdffsdf","sadfsdf","ewrwsfdf"};即数组指针的形式。2.b[3][30]={"sadfsdadf","sdfsdf","fewdfsf"},但第二种数组中的每个元素大小已经规定为必须相同了,即30;而数组指针则每个元素的不同,它采用连续存放的形式。这样数组指针占用的空间就要比二维数组要少。由此,要用数组表示一系列待显示的字符串,请使用指针数组,因为它比二维字符数组的效率要高。
  6. 关于字符串的输入输出,除了常用的输入语句scanf之外,还有专门用于输入"gets()"函数,"fgets()"函数,"gets_s"。gets因为它无法检查数组是否装得下输入行,所以一直处于要被废除的状态,gets()函数的读取是整行输入,直到遇到换行符,然后丢弃换行符,储存其他字符,并在这些字符末尾添加一个空字符('\0')使其成为一个C字符串。而fputs()函数因为它可以通过第二个参数限制读入的字符解决溢出问题这一功能,所以一直被引用。关于它的第二个参数限制输入的数量问题,如果这个参数为n,那么将会读入n-1个字符。而且当它读到换行符时,会把它存储在字符串中。它的第三个参数是用来指明要读入文件,如果要读入从键盘中输入的数据,则以stdin作为参数,该标识符定义在stdio.h中,对应的它的输出函数fput()的第三个参数要使用stdout。注意当fgets()读入的字符串超过要求的长度时,要在对应长度字符的后面加上一个空字符'\0'。区别于fgtes,gets_s(words,stlen)函数只从标准输入中读取数据,,所以它不需要第三个参数;如果gets_s读到换行符,它会丢弃它,而不是保存。关于puts()函数,它在输出时会自动在字符串结尾加一个换行符,而puts如何停止输出呢?当函数遇到空字符时,所以必须保有空字符,否则,puts()会一直输出,直到发现第一个空字符为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值