@mwumli
2015-05-18T02:07:02.000000Z
字数 1409
阅读 1655
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个元素值为30arr[3] = 20; //第3个元素值为20
//定义了一个数组大小为20的数组int arr1[20];//定义了一个数组大小为10的数组, 并初始化前6个元素为1,2,3,4,5,6,后4个元素默认为0int 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,数组的值已发生改变