您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C语言 >> 辅导 >> 正文    
  C教程-----数据类型、变量和运算符(3) 【注册男护士专用博客】          

C教程-----数据类型、变量和运算符(3)

www.nanhushi.com     佚名   不详 

三、多维数组 
多维数组的一般说明格式是: 
类型 数组名[第n维长度][第n-1维长度]......[第1维长度]; 
这种说明方式与BASIC、FORTRAN等语言中多维数组的说明不一样。 
例如: 
int m[3][2]; /*定义一个整数型的二维数组*/ 
char c[2][2][3]; /*定义一个字符型的三维数组*/ 
数组m[3][2]共有3*2=6个元素, 顺序为: 
m[0][0], m[0][1], m[1][0], m[1][1], m[2][0], m[2][1]; 
数组c[2][2][3]共有2*2*3=12个元素, 顺序为: 
c[0][0][0], c[0][0][1], c[0][0][2], 
c[0][1][0], c[0][1][1], c[0][1][2], 
c[1][0][0], c[1][0][1], c[1][0][2], 
c[1][1][0], c[1][1][1], c[1][1][2], 
数组占用的内存空间(即字节数)的计算式为: 
字节数=第1维长度*第2维长度*...*第n维长度*该数组数据类型占用的字节数 
4.5 变量的初始化和赋值 
一、变量的初始化 
变量的初始化是指变量在被说明的同时赋给一个初值。Turbo C2.0中外部变量 
和静态全程变量在程序开始处被初始化, 局部变量包括静态局部变量是在进入定义 
它们的函数或复合语句时才作初始化。所有全程变量在没有明确的初始化时将被自 
动清零, 而局部变量和寄存器变量在未赋值前其值是不确定的。 
对于外部变量和静态变量, 初值必须是常数表达式, 而自动变量和寄存器变量 
可以是任意的表达式, 这个表达式可以包括常数和前面说明过的变量和函数。 
1. 单个变量的初始化 
例如: 
float f0, f1=0.2;/*定义全程变量, 在初始化时f0被清零, f1被赋0.2*/ 
main() 

static int i=10, j; /*定义静态局部变量, 初始化时i被赋10, j不确 
定*/ 
int k=i*5; /*定义局部变量, 初始化时k被赋10*5=50*/ 
char c=’y’; /*定义字符型指什变量并初始化*/ 



2. 数组变量的初始化 
例如: 
main() 

int p[2][3]={{2, -9, 0}, {8, 2, -5}}; /*定义数组p并初始化/* 
int m[2][4]={{27, -5, 19, 3}, {1, 8, -14, -2}};/*定义数组m并初 
始化*/ 
char *f[]={’A’, ’B’, ’C’}; /*定义数组f并初始化*/ 

从上例可以看出: Turbo C2.0中数组进行初始化有下述规则: 
(1) 数组的每一行初始化赋值用"{}"并用","分开, 总的再加一对"{}"括起来, 
最后以";"表示结束。 
(2) 多维数组的存储是按最右维数的变量变化最快的原则。 
(3) 多维数组存储是连续的, 因此可以用一维数组初始化的办法来初始化多维 
数组。 
例如: 
int x[2][3]={1, 2, 3, 4, 5, 6};/*用一维数组来初始化二维数组*/ 
(4) 对数组初始化时, 如果初值表中的数据个数比数组元素少, 则不足的数组 
元素用0来填补。 
(5) 对指针型变量数组可以不规定维数, 在初始化赋值时, 数组维数从0 开始 
被连续赋值。 
例如: 
char *f[]={’a’, ’b’, ’c’}; 
初始化时将会给3个字符指针赋值, 即: *f[0]=’a’, *f[1]=’b’, *f[2]=’c’。 
3. 指针型变量的初始化 
例如: 
main() 

int *i=7899; /*定义整型数指针变量并初始化*/ 
float *f=3.1415926; /*定义浮点数指针变量并初始化*/ 
char *s="Good"; /*定义字符型指针变量并初始化*/ 
}

二、变量的赋值
变量赋值是给已说明的变量赋给一个特定值。
1. 单个变量的赋值
(1) 整型变量和浮点变量
这两种变量采用下列格式赋值
变量名=表达式;
例如:
main()
{
int a, m; /*定义局部整型变量a, m*/
float n; /*定义局部浮点变量f*/
a=100, m=20; /*给变量赋值*/
n=a*m*0.1;

}

说明:
Turbo C2.0中允许给多个变量赋同一值时可用连等的方式。
例如:
main()
{
int a, b, c;
a=b=c=0; /*同时给a,b,c赋值*/
}

(2) 字符型变量
字符型变量可以用三种方法赋值。
例如:
main()
{
char a0, a1, a2; /*定义局部字符型变量a0, a1, a2*/
a0=’b’; /*将字母b赋给a0*/
a1=50; /*将数字2(十进制ASCII值为50赋给a1*/
a2=’x0d’; /*将回车符赋给a2*/

}

(3) 指针型变量
例如:
main()
{
int *i;
char *str;
*i=100;
str="Good";
}
*i表示i是一个指向整型数的指针, 即*i是一个整型变量, i是一个指向该整型
变量的地址。
*str表示str是一个字符型指针, 即保留某个字符地址。在初始化时, str没有
什么特殊的值, 而在执行str="Good"时, 编译器先在目标文件的某处保留一个空间
存放"Good"的字符串, 然后把这个字符串的第一个字母"G"的地址赋给str, 其中
字符串结尾符""是编译程序自动加上的。


对于指针变量的使用要特别注意。上例中两个指针在说明前没有初始化, 因此
这两指针为随机地址, 在小存储模式下使用将会有破坏机器的危险。正确的使用办
法如下:
例如:
main()
{
int *i;
char *str;
i=(int*)malloc(sizeof(int));
i=420;
str=(char*)malloc(20);
str="Good, Answer!";

}
上例中, 函数(int*)malloc(sizeof(int))表示分配连续的sizeof(int)=2个字
节的整型数存储空间并返回其首地址。同样(char*)malloc(20)表示分配连续20 个
字节的字符存储空间并返回首地址(有关该函数以后再详述)。由动态内存分配函数
malloc()分配了内存空间后, 这部分内存将专供指针变量使用。
如果要使i指向三个整型数, 则用下述方法。
例如:
#include
main()
{
int *a;
a=(int*)malloc(3*sizeof(int));
*a=1234;
*(a+1)=4567;
*(a+2)=234;
}
*i=1234表示把1234存放到i指向的地址中去, 但对于*(i+1)=4567, 如果认为
将4567存放到i指向的下一个字节中就错了。Turbo C2.0中只要说明i为整型指针,
则 (i+1) 等价于 i+1*sizeof(int)
同样 (i+2) 等价于 i+2*sizeof(int)
#p# 2. 数组变量的赋值
(1) 整型数组和浮点数组的赋值
例如:
main()
{
int m[2][2];
float n[3];
m[0][0]=0, m[0][1]=17, m[1][0]=21;/*数组元素赋值*/
n[0]=109.5, n[1]=-8.29, n[2]=0.7;
}

(2)字符串数组的赋值
例如:
main()
{
char s[30];
strcpy(s, "Good News!"); /*给数组赋字符串*/

}
上面程序在编译时, 遇到char s[30]这条语句时, 编译程序会在内存的某处留
出连续30个字节的区域, 并将第一个字节的地址赋给s。当遇到strcpy( strcpy 为
Turbo C2.0的函数)时, 首先在目标文件的某处建立一个"Good News!" 的字符串。
其中表示字符串终止, 终止符是编译时自动加上的, 然后一个字符一个字符地复
制到s所指的内存区域。因此定义字符串数组时, 其元素个数至少应该比字符串的
长度多1。
注意:
1. 字符串数组不能用"="直接赋值, 即s="Good News!"是不合法的。所以应分
清字符串数组和字符串指针的不同赋值方法。
2. 对于长字符串, Turbo C2.0允许使用下述方法:
例如:
main()
{
char s[100];
strcpy(s, "The writer would like to thank you for"
"your interest in his book. He hopes you"
"can get some helps from the book.");
}

(3)指针数组赋值
例如:
main()
{
char *f[2];
int *a[2];
f[0]="thank you"; /*给字符型数组指针变量赋值*/
f[1]="Good Morning";
*a[0]=1, *a[1]=-11; /*给整型数数组指针变量赋值*/
}

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目