C语言支持一维数组和多维数组.如果一个数组的所有元素都不是数组,那么该数组称为一维数组.
在C语言中使用数组必须先进行定义,一维数组的定义方式为:类型说明符; 数组名 ;[常量表达式].
其中,类型说明符是任一种基本数据类型或构造数据类型.数组名是用户定义的数组标识符,方括号中的常量表达式表示数据元素的个数,也称为数组的长度.例如:
int a[10]; ?/* 说明整型数组a,有10个元素 */
对于数组类型说明应注意以下几点:
①.、数组的类型实际上是指数组元素的取值类型.对于同一个数组,其所有元素的数据类型都是相同的.
int a;
float a[10];
是错误的.
// ...
是合法的.但是下述说明方式是错误的.
int a[n];
扩展资料:
C语言是一门通用计算机编程语言,广泛应用于底层开发.C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台.
C语言是一门面向过程的计算机编程语言,与C◆◆,Java等面向对象的编程语言有所不同.
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等.
C语言数组的定义及引用1
①1 一维数组的定义、初始化和引用
①一维数组的定义方式为:
类型说明符 数组名[常量表达式]
(1)数组名的命名方法与变量名相同,遵循标识符命名规则;
可以用赋值语句或输入语句使数组中的元素得到值,但要占用运行时间.可以使数组在运行之前初始化,即在编译阶段使之得到初值.
(1)在定义数组时对数组元素赋以初值.如:
static int a[10]={0,0,0,0,0,0,0,0,0,0};
不能用:
static int a[10]={0*10};
如果对static型数组不赋初值,系统会对定义的所有数组元素自动赋以0值.
C语言规定不能一次引用整个数组,引用时只能逐个元素引用,数组元素的表示形式为:
数组名[下标]
下标可以是整型常量或整型表达式.如:
①二维数组定义的一般形式为
类型说明符数组名[常量表达式][常量表达式]
C语言采用上述定义方法,我们可以把二维数组看做是一种特殊的一维数组:它的元素又是一维数组.在C语言中,二维数组中元素的排列顺序是:先按行存放,再按列存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素.
(1)分行给二维数组赋初值.如:
以上赋值把第一个花括号内的数据赋给第一行元素,第二个花括号内数据赋给第二元素...,即按行赋值.
数组[下标][下标]
在引用二维数组时,必须是单个元素,不能是整个数组名.下标可以是一个表达式,但不能是变量.如果下标是一个表达式,注意表达式的值不能超出数组定义的上、下限.
指针数组说明的一般形式为:
类型说明符 *数组名[数组长度]
其中类型说明符为指针值所指向的变量的类型.例如:
表示pa是一个指针数组,它有三个数组元素,每个元素值都是一个指针,指向整型变量.
main(){
int *p=a[0];
int i;
printf("%d,%d,%d ",*pa[i],p[i],*(p◆i));
}
本例程序中,pa是一个指针数组,三个元素分别指向二维数组a的各行.然后用循环语句输出指定的数组元素.其中*a[i]表示i行0列元素值;*(*(a◆i)◆i)表示i行i列的元素值;*pa[i]表示i行0列元素值;由于p与a[0]相同,故p[i]表示0行i列的值;*(p◆i)表示0行i列的值.读者可仔细领会元素值的各种不同的表示方法.
应该注意指针数组和二维数组指针变量的区别.这两者虽然都可用来表示二维数组,但是其表示方法和意义是不同的.
二维数组指针变量是单个的变量,其一般形式中"(*指针变量名)"两边的括号不可少.而指针数组类型表示的是多个指针(一组有序指针)在一般形式中"*指针数组名"两边不能有括号.例如:
char *name[]={"Illagal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
};
完成这个初始化赋值之后,name[0]即指向字符串"Illegal day",name[1]指向"Monday".......
指针数组也可以用作函数参数.
static char *name[]={ "Illegal day",
char *ps;
char *day_name(char *name[],int n);
printf("input Day No: ");
scanf("%d",i);
if(i0) exit(1);
ps=day_name(name,i);
char *day_name(char *name[],int n){
pp1=*name;
#include"string.h"
void sort(char *name[],int n);
void print(char *name[],int n);
static char *name[]={ "CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};
sort(name,n);
print(name,n);
void sort(char *name[],int n){
char *pt;
int i,j,k;
for(i=0;in-1;i◆◆){
k=i;
for(j=i◆1;jn;j◆◆)
if(strcmp(name[k],name[j])0) k=j;
if(k!=i){
pt=name[i];
name[i]=name[k];
name[k]=pt;
void print(char *name[],int n){
for (i=0;in;i◆◆) printf("%s ",name[i]);
说明:
①.) 在以前的例子中采用了普通的排序方法,逐个比较之后交换字符串的位置.交换字符串的物理位置是通过字符串复制函数完成的.反复的交换将使程序执行的速度很慢,同时由于各字符串(国名)的长度不同,又增加了存储管理的负担.用指针数组能很好地解决这些问题.把所有的字符串存放在一个数组中,把这些字符数组的首地址放在一个指针数组中,当需要交换两个字符串时,只须交换指针数组相应两元素的内容(地址)即可,而不必交换字符串本身.
运行结果:
数组中的每个元素都有一个序号,这个序号从0开始,而不是从我们熟悉的1开始,称为下标(Index).使用数组元素时,指明下标即可,形式为:
arrayName[index]
我们来最后提醒一下大家数组的定义方式:
dataType arrayName[length];
dataType 为数据类型,arrayName 为数组名称,length 为数组长度.例如:
需要注意的是:
数组的初始化
上面的代码是先定义数组再给数组赋值,我们也可以在定义数组的同时赋值:
{ }中的值即为各元素的初值,各值之间用,间隔.
对数组赋初值需要注意以下几点:
①.) 可以只给部分元素赋初值.当{ }中值的个数少于元素个数时,只给前面部分元素赋值.例如:
当赋值的元素少于数组总体元素的时候,剩余的元素自动初始化为 0:对于short、int、long,就是整数0;对于char,就是字符 '';对于float、double,就是小数0.0.
我们可以通过下面的形式将数组的所有元素初始化为 0:
int a[10] = {0};
char c[10] = {0};
float f[10] = {0};
由于剩余的元素会自动初始化为0,所以只需要给第0个元素赋0值即可.
示例:输出数组元素.
int a[10]={1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
而不能写为:
int a[10]=1;
等价于
方法1,
使用指针数组:
#include
string.h
stdio.h
stdlib.h
int
main()
{
char
*test[]={
"this
is
a
test
",
"test
"
"};
i=0;
while(strcmp(test[i],
")
!=
0)
puts(test[i◆◆]);
system(
"PAUSE
");
return
0;
这个方法比较简单,
但是问题是这样的话,字符串是常量,无法修改.当然这个问题也可以解决,
比如使用数组赋值,
然后将
数组首地址赋值给某一个指针即可.
这样的话,
问题就是
空间的浪费!
C语言字符串数组中的每一个元素均为指针,即有诸形如"ptr_array[i]"的指针.由于数组元素均为指针,所以呢ptr_array[i]是指第i◆1个元素的指针.
扩展资料
字符串数组数组元素表示方法:
数组元素的一般形式为:数组名[下标] 其中的下标只能为整型常量或整型表达式.如为小数时,C编译将自动取整.
定义字符数组的方法,与定义整数数组或浮点数数组并无二致,都是完全一样的.例如,以下的语句,可以定义一个最多存放1000个字符的字符数组:
char s[1000];