@mwumli
2015-05-18T10:07:02.000000Z
字数 1409
阅读 1435
OSEP
SPLOS
SPLOS语言的数组只支持 int
型数组和 char
型数组
数组的元素是从第0个开始,而不是第1个
因此,假如数组 arr[10]
有10个数组元素,其元素为 arr[0] ~ arr[19]
数组大小必须在定义时指定,不支持动态定义,比如
int size = 20;
int arr[size]; //Error, size 是变量,值可能变化,而SPLOS语言规定不能动态定义数组
数组元素的操作
我们通常使用 []
运算符来访问数组元素
int arr[20];
arr[0] = 30; //第0个元素值为30
arr[3] = 20; //第3个元素值为20
//定义了一个数组大小为20的数组
int arr1[20];
//定义了一个数组大小为10的数组, 并初始化前6个元素为1,2,3,4,5,6,后4个元素默认为0
int arr2[10]={1,2,3,4,5,6};
//定义了一个数组大小为40的空数组
char str_arr1[40];
//定义了一个数组大小为10的空数组
char str_arr2[10]={'a', 'b', 'c'};
//定义了一个数组大小为30的数组,且被用字符串"hello,world"初始化
char str_arr2[30]="hello,world";
字符串是一个常量,通常用一对双引号引起来的一些字符
"this is a string"
是一个字符串
字符串末尾有一个隐藏\0
,用以表明字符串结束
这个隐藏的字符不用程序员来手动添加,系统会自动添加
\0
只是一个字符串结束标志,计算字符串长度以及输出字符串不会包含它
字符串可以用字符数组来存储,但字符数组不是字符串
比如:
char abc1[10]={'s','t','r','i','n','g'};
char abc2[10]="string";
abc1
和 abc2
是两个字符数组,但是 abc1
存储的6个字符,abc2
存储个一个长度为6的字符串,但是有7个字符,末尾字符为\0
一般情况下,作为函数的参数,其值在函数内部发生改变,不影响其在主调函数的值
因为当函数的形式参数是函数的局域变量,而在函数调用的时候只是把主调函数内部的变量的只传递过来而已
数组作为函数参数,函数内部的数组的操作,其结果也会被带到函数外部
即 数组的每一个元素的值在函数内部发生改变,那么在主调函数中,值也发生改变
#import {
splos_io.p; //导入标准输入输出模块
}
void func(int a[], int n)
{
int i;
i = 0;
while(i < n) {
a[i] = a[i] + i;
}
}
void print(int a[], int n)
{
int i;
i = 0;
while(i < n) {
sp_printf_num(a[i]);
sp_printf_char(' ');
}
}
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
func(arr, 10);
print(arr, 10);;
return 0;
}
说明:
1. splos_io.p
是 SPLOS
语言的标准输入输出库,内含输入输出的函数
2. func
是自定义的一个函数,用数组作为形式参数,功能:把数组中的每一个元素值都加上一个数字
3. print
函数是自定义的一个输出函数,把数组输出
4. 通过运行程序可以看出,在main
函数中定义的数组的值在经过调用func
,数组的值已发生改变