C语言-变量、输入输出、数组
变量与常量
常量:
- 定义:常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
- 在 C 中,有两种简单的定义常量的方式:
- 使用 #define 预处理器: #define 可以在程序中定义一个常量,它在编译时会被替换为其对应的值。
- 使用 const 关键字:const 关键字用于声明一个只读变量,即该变量的值不能在程序运行时修改。
- 注意:数组名也是常量,如下解释:
int a[] = {1,2,3}; // a[0] 是变量名,a[0]的值是1 // a 是数组名,a的值是一个地址,即&a[0],所以a是常量。
变量:
- 定义:变量其实只不过是程序可操作的存储区的名称。
int a = 10; printf("%d,%p\n",a,&a); a = 100; printf("%d,%p\n",a,&a); // 10,0xbf90cebc // 100,0xbf90cebc // 由此可见,a的值发生了变化,但是地址并没有变。
输入输出
- 输出
-
字符输出函数
int putchar(int c);
参数: c为字符常量、变量或表达式
功能:把字符c输出到显示器上
返值:正常,为显示的代码值; -
格式输出函数
printf()
-
字符串输出函数
int puts(const char *s)
功能:向显示器输出字符串(输出完,换行)
说明:字符数组必须以‘\0’结束
-
- 输入
-
字符输入函数
int getchar(void);
功能:从键盘读一字符
返值:正常,返回读取的代码值;出错或结束键盘输入,返回-1 (ctrl d) -
格式输入函数
int scanf("格式控制串",地址表);
功能:按指定格式从键盘读入数据,存入地址表指定存储单元中,并按回车键结束。
返值:正常,返回输入数据个数
地址表:变量的地址,常用取地址运算符&int yy,mm,dd; scanf("%4d%2d%2d",&yy,&mm,&dd); // 中间输入可以使用空格和回车。仅针对整形 printf("%4d-%2d-%2d\n",yy,mm,dd);
-
字符串输入函数
char * gets(char *str);
功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’
说明1:输 入串长度应小于字符数组维数
说明2:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志。 -
注意:输入函数留下的“垃圾
int x; char ch; scanf("%d",&x); scanf("%c",&ch);// 回车也是字符 printf("x=%d,ch=%d\n",x,ch); //方法1:用getchar()清除 //方法2:用格式串中空格或“%*c”来“吃掉”
-
数组
一维数组
-
定义:数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素。
-
存储特点:数组中的元素在计算机内存中是连续存储的。数组名表示内存首地址。
-
格式:
<存储类型> <数据类型 > <数组名>[<表达式>]
-
数组的引用:数组必须先定义,后使用。只能逐个引用数组元素,不能一次引用整个数组。
-
数组的初始化,如下:
static int a[5]; // 等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0; int a[5]={6,2,3}; // 等价于:a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0; // int a[3]={6,2,3,5,1}; // error int a[]={1,2,3,4,5,6};//编译系统根据初值个数确定数组维数 // 总结:[]中必须要给数组维数,然后分配内存空间。
- 数组的初始化注意点:
- 数组不初始化,其元素值为随机数。如int a[10],其元素是随机的。
- 数组部分初始化,其未被初始化的元素值是0。如int a[10]={1,2},则a[3]的值默认是0。
- 对static数组元素不赋初值,系统会自动赋以0值。
- 数组的初始化注意点:
-
定义数组维度
int i = 15; int a[i];
-
关于数组越界
- C语言对数组不作越界检查(包括赋值和取值),使用时要注意
多维数组
- 二维数组声明格式:
int a[3][4]; int b[][4];// 声明时列数不能省略,行数可以
- 多维数组的元素存放顺序
内存是一维的,多维数组元素按照行序优先。如int a[2][2],则顺序是a[0][0],a[0][1],a[1][0],a[1][1]。