C语言基础知识(三)(数组)

    一、双精度输入输出

在使用scanf 函数输入双精度实型数据的时候,应当使用(%lf 进行声明),即scanf("%lf", &a);

在输出的时候可以用"%f"、"%lf" 或 "%m.nf"

二、数组定义的长度

数组在定义的时候语法:类型符号 数组名[常量表达式],例如:int a[20];

但是如果在被调用的函数(不包含主函数)中定义数组,其长度是可以是变量或者非常量表达式的。

例如:

函数void func(int n)
{int a[2 * n]; 是合法的,其中n的值从实参中传来
}

三、字符数组的初始化、赋值和结束符'\0'

在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。因此当把一个字

串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用字符数组的长

度来判断字符串的长度了。(一般要多开一个空间存 \0)

例如:

一种:
char s1[2] = {"ni"}; 
实际存的为:'n' 'i'一般要多开一个空间存'\0'
char s1[3] = {"ni"}; 
实际存的为:'n' 'i' '\0' 另一种赋值:
char s2[3];
s2[0] = {'n'};
s2[1] = {'i'};
实际存的为:'n' 'i'

赋值问题:

字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,
字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的。C语言并没有提供可以直接操作字符串的运算符;“=”可以用于其他数据类型的赋值,
但是不可以直接给字符串赋值
char str[];
str="I am happy";

字符串长度问题:

strlen函数求得的字符串长度是从字符串第一个元素到第一个'\0'之间元素的个数。

遇到'\0'就终止,因而返回的结果是第一个'\0'前字符元素的个数。(不包含\0)

sizeof求得的结果是存储该字符串的变量占用的空间大小,因而一定会包括'\0'.(包含\0)

若'\0'后还有空余的空间,也会包含到结果里面。也就是说sizeof包含数组中所有的字符,因而它返回的是存储字符串的变量所占用的内存空间大小。

四、数组的输入输出

1、使用%c逐字输入输出。

2、使用%s将整个字符串一次输出输入。

定义char数组
char a[10];
scanf("%s", a);   输入Chinaprintf("%s\n", a); 一次性输出,知道遇到第一个空格或\0

 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注