c语⾔⼀维数组字符串数组初始化,⼀维数组的定义、初始化和
引⽤
⼀维数组的定义、初始化和引⽤ ⼀维数组的定义、初始化和引⽤ 1.⼀维数组的定义⽅式为:
类型说明符 数组名[常量表达式]
(1)数组名的命名⽅法与变量名相同,遵循标识符命名规则;
(2)数组是⽤⽅括号括起来的常量表达式,不能⽤圆括号;
(3)常量表达式表⽰数组元素的个数,即数组的长度,数组的下标从0开始,下标的最⼤值为:
常量表达式-1;
(4)常量表达式中可以包括常量和符号常量,不能包括变量。
可以⽤赋值语句或输⼊语句使数组中的元素得到值,但要占⽤运⾏时间。可以使数组在运⾏之前初始化,即在编译阶段使之得到初值。
2.对数组初始化可以⽤以下⽅法实现:
(1)在定义数组时对数组元素赋以初值。如:
static int a[10]={0,1,2,3,4,5,6,7,8,9};
经过上⾯的定义和初始化后,a[0]=0,a[1]=1,…,a[9]=9。
(2)初始化时可以只对⼀部分元素赋初值。例如:
static int a[10]={0,1,2,3,4};
定义的数组有10个元素,但只对其中前5个元素赋了初值,后5个元素初值为0。
(3)如果想使⼀个数组的元素值全部为0,可以⽤下⾯的⽅法:
static int a[10]={0,0,0,0,0,0,0,0,0,0};
不能⽤:
static int a[10]={0*10};
如果对static型数组不赋初值,系统会对定义的所有数组元素⾃动赋以0值。
(4)在对全部数组元素赋初值时,可以不指定数组长度。
3.⼀维数组的引⽤⽅法是:
C语⾔规定不能⼀次引⽤整个数组,引⽤时只能逐个元素引⽤,数组元素的表⽰形式为:
数组名[下标]
下标可以是整型常量或整型表达式。如:
a[0]=a[5]+a[7]-a[2*3];
§⼆维数组的定义、初始化和引⽤
1.⼆维数组定义的⼀般形式为
类型说明符 数组名[常量表达式][常量表达式]
C语⾔采⽤上述定义⽅法,我们可以把⼆维数组看做是⼀种特殊的⼀维数组:它的元素⼜是⼀维数组。在C语⾔中,⼆维数组中元素的排列顺序是:先按⾏存放,再按列存放,即在内存中先顺序存放第⼀⾏的元素,再存放第⼆⾏的元素。
2.⼆维数组的初始化:⼆维数组可以⽤下⾯的⽅法初始化:
(1)分⾏给⼆维数组赋初值。如:
static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
以上赋值把第⼀个花括号内的数据赋给第⼀⾏元素,第⼆个花括号内数据赋给第⼆元素…,即按⾏赋值。
(2)可以将所有的数据写在⼀个花括号内,按数组排列的顺序对各元素赋值。
(3)可以对数组的部分元素赋初值。如:
static int a[3][4]={{1},{5},{9}};
以上赋值的结果是:数组第⼀列的元素分别赋了初值1,5,9,其余元素的值都是0。
(4)如果对⼆维数组的全部元素都赋初值,则定义数组时对第⼀维的长度可以不指定,但第⼆维的长度不能省。
3.⼆维数组的引⽤:⼆维数组的元素可以表⽰为:
数组[下标][下标]
在引⽤⼆维数组时,必须是单个元素,不能是整个数组名。下标可以是⼀个表达式,但不能是变量。如果下标是⼀个表达式,注意表达式的值不能超出数组定义的上、下限。
§字符串与字符数组
1.字符数组的定义
定义⽅法与前⾯介绍的类似,只是将数组定义为字符型即可。例如:
char c[10];
这⾥定义了⼀个包含10个元素的字符数组c。
2.字符数组的初始化
对字符数组初始化,可以采⽤以下⽅法:
(1)逐个字符赋给数组中各元素;
(2)⽤字符串常量使字符数组初始化。
3.字符串
在C语⾔中,字符串是作为字符数组来处理的,字符串可以存放在字符型⼀维数组中,故可以把字符型⼀维数组作为字符串变量。
字符串常量是⽤双引号括起来的⼀串字符。
C语⾔中约定⽤′\0′作为字符串的结束标志,它占内存空间,但不计⼊串的长度,′\0′的代码值为0。
系统对字符串常量也⾃动加⼀个′\0′作为结束符。例如″c
language″共有10个字符,但在内存中占11个字节,最后⼀个字节存放′\0′。
4.字符数组的输⼊输出
(1)逐个字符输⼊和输出
①在标准输⼊输出printf和scanf中使⽤%c格式描述符;
②使⽤getchar和putchar函数。例如:
for(i=0;i<10;i++)
scanf(″%c″,&str[i]); str[i]=′\0′;
for(i=0;i<10;i++)
printf(″%c″,str[i]);
(2)字符串整体输⼊输出
①在标准输⼊输出函数printf和scanf中使⽤%s格式描述符;
输⼊形式:
char str[6];
scanf(″%s″,str);
其中str为字符数组名,代表着str字符数组的起始地址,输⼊时系统⾃动在每个字符串后加⼊结束符′\0′。若同时输⼊多个字符串,则以空格或回车符分隔。
输⼊形式:
printf(″%s″,str);
输字符串时,遇第⼀个′\0′即结束。但可⼈为控制输出串所占的域宽,例如:
printf(″%6s″,str);printf(″%-6s″,str);
②使⽤gets和puts函数输⼊输出⼀⾏
gets函数⽤来从终端键盘读字符,直到遇换⾏符为⽌,换⾏符不属字符串的内容。
调⽤形式:
gets(str);
str为字符数组名或字符指针,字符串输⼊后,系统⾃动将′\0′置于串尾代替换⾏符。若输⼊串长超出数组定义长度时,系统报错。
puts函数⽤来把字符串的内容显⽰在屏幕上。
调⽤形式:
puts(str);
str的含义同上。输出时,遇到第⼀个′\0′结束并⾃动换⾏,字符串中可以含转义字符。
§字符串的指针以及指向字符串的指针变量
1.⽤指针⽅法实现⼀个字符串的存储和运算如:
char*strp=″china″;
此处定义了⼀个字符指针变量strp,变量中存放的是字符串第⼀个字符的地址。
C语⾔对字符串常量是按字符数组处理的,它实际上在内存开辟了⼀个字符数组⽤来存放字符串变量,并把字符串⾸地址赋给字符指针变量strp。在输出时⽤
printf(″%s
″,strp);
通过字符数组名或字符指针变量可以输出⼀个字符串。⽽对⼀个数值型数组,是不能企图⽤数组名输出它的全部元素的。
2.字符指针变量与字符数组
虽然⽤字符数组和字符指针变量都能实现字符串的存储和运算,但它们⼆者之间是有区别的,不应混
为⼀谈,主要有以下⼏点:
(1)字符数组由若⼲个元素组成,每个元素中放⼀个字符,⽽字符指针变量中存放的是地址(字符串的⾸地址),决不是将字符串放到字符指针变量中。
(2)对字符数组只能对各个元素赋值,不能⽤以下办法对字符数组赋值。
char str[14];
str=″I love China!″;
⽽对字符指针变量,可以采⽤下⾯⽅法赋值:
char*a;
a=″I love China!″;
但注意赋给a的不是字符,⽽是字符串的⾸地址。
(3)赋初值时,对以下的变量定义和赋初值:
char*a=″I love China!″;
等价于:
char*a;
a=″I love China!″;
⽽对数组初始化时:
static char str[14]={″I love China!″};
不能等价于
char str[14];
str[]={″I love China!″};
即数组可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。
(4)在定义⼀个数组时,在编译时即已分配内存单元,有确定的地址。⽽定义⼀个字符指针变量时,给指针变量分配内存单元,在其中可以放⼀个地址值,也就是说,该指针变量可以指向⼀个字符型数据,但如果未对它赋予⼀个地址值,这时该指针变量并未具体指向哪⼀个字符数据。
(5)指针变量的值是可以改变的。
3.字符串处理函数
C语⾔中没有对字符串进⾏合并、⽐较和赋值的运算符,但⼏乎所有版本的C语⾔中都提供了有关的库函数。例如:
(1)strcat函数:连接两个字符数组中的字符串
(2)strcpy函数:字符拷贝函数
(3)strcmp函数:字符⽐较函数
(4)strlen函数:测试字符串长度的函数
(5)strlwr函数:将字符串中⼤写字母转换成⼩写字母
(6)strupr函数:将字符中⼩写字母转换成⼤写字母
§传给main函数的参数
在此之前,我们在编写main函数时,其后⼀对圆括号是空的,没有参数。其实,在⽀持C的环境中,可以在运⾏C程序时,通过运⾏C程序的命令⾏,把参数传送给C程序。
§通过实参向函数传递函数名或指向函数的指针变量
c语言如何创建字符串数组1.指向函数的指针变量的定义
在C语⾔中函数名代表该函数的⼊⼝地址,因此可以定义⼀种指向函数地址的指针变量。
2.函数名或指向函数的指针变量作为参考
函数名或指向函数的指针变量可以作为实参传送给函数。这时,对应的形参是类型相同的指针变量。
§函数的递归调⽤
C语⾔中的函数可以递归调⽤,即:可以直接或间接地⾃⼰调⽤⾃⼰。前者称简单递归,后者称间接递归。
§局部变量和全局变量
在函数内部或复合语句内部定义的变量称为局部变量。函数的形参属于局部变量。在函数外部定义的
变量称为全局变量。有时,局部变量也称为内部变量,全局变量也称为外部变量。
§变量的存储属性(⾃动、静态、寄存器、外部),变量的作⽤域和⽣存期
C语⾔中⽤来说明变量存储属性的关键字共有四个:auto(⾃动)、static(静态)、register(寄存器)、extern(外部)。
1.局部变量的存储属性
局部变量可以是⾃动类别(⽤auto,register说明),也可以是静态类别(⽤static说明)。形参只能是⾃动存储类别,不允许是static类别。
当局部变量未指明类别时,被⾃动说明成⾃动(auto)变量。这类局部变量称为⾃动变量。其值存放在内存的动态存储区,因此在退出其作⽤域后,变量被⾃动释放,其值不予保留。
当局部变量说明成寄存器(register)类型时,与⾃动(auto)变量⼀样属于⾃动类别,所不同的是此时变量的值保留在CPU中的寄存器中。
当变量说明成static(静态)类型时,称这样的变量为静态局部变量。在程序运⾏期间,它占据⼀个永久的存储单元,在函数退出后,变量的值仍旧保留。
2.全局变量的存储属性
全局变量都属于静态存储类别,可以⽤extern和static对它们进⾏说明。
当⼀个⽂件中要引⽤另⼀⽂件中的全局变量或在全局变量定义之前要引⽤它时,可⽤exˉtern说明。相当于扩⼤全局变量的作⽤域。
⽤static(静态)说明的全局变量称为静态全局变量,它仅能由本⽂件引⽤,即使在其⽂件中⽤extern说明也不能使⽤,它相当于限制了全局变量作⽤域的扩展。
§内部函数和外部函数
1.在C语⾔中,所有的函数在本质上都是外部函数。
2.函数定义时⽤extern进⾏说明称为外部函数。函数的隐含类别为外部函数,外部函数可以被其他⽂件调⽤。
3.定义函数时⽤static进⾏说明称为静态函数,也称内部函数。静态函数也是外部函数,只是它仅局限于它所在的⽂件,其他⽂件不能调⽤。
§宏定义(不带参数的宏定义,带参数的宏定义)
1.编译预处理就是对C源程序进⾏编译前,由″编译预处理程序″对预处理命令⾏进⾏处理的过程。
2.C语⾔中,凡是以″#″开头的⾏,都称为″编译预处理″命令⾏。
C语⾔中的编译预处命令
有:#define,#undef,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#line,#pragma,#error。这些预处理命令组成的预处理命令⾏必须在⼀⾏的开头以″#″号开始,每⾏的未尾不得加″;″号,以区别于C语句、定义和说明语句。
3.不带参数的宏定义:命令的⼀般形式为:
#define 标识符 字符串
定义中的″标识符″为⽤户定义的标识符,称为宏名。在预编译时,C预编译程序将出现的宏名替换成″字符串″的内容,这⼀过程也称为宏展开。
4.带参数的宏定义:命令的⼀般形式为

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。