[关闭]
@mwumli 2015-05-18T10:07:02.000000Z 字数 1409 阅读 1420

SPLOS--数组

OSEP SPLOS


  1. SPLOS语言的数组只支持 int 型数组和 char 型数组

  2. 数组的元素是从第0个开始,而不是第1个
    因此,假如数组 arr[10] 有10个数组元素,其元素为 arr[0] ~ arr[19]

  3. 数组大小必须在定义时指定,不支持动态定义,比如

    int size = 20;
    int arr[size]; //Error, size 是变量,值可能变化,而SPLOS语言规定不能动态定义数组

  4. 数组元素的操作
    我们通常使用 [] 运算符来访问数组元素

  1. int arr[20];
  2. arr[0] = 30; //第0个元素值为30
  3. arr[3] = 20; //第3个元素值为20

int 型数组

定义

  1. //定义了一个数组大小为20的数组
  2. int arr1[20];
  3. //定义了一个数组大小为10的数组, 并初始化前6个元素为1,2,3,4,5,6,后4个元素默认为0
  4. int arr2[10]={1,2,3,4,5,6};

char 型数组

定义

  1. //定义了一个数组大小为40的空数组
  2. char str_arr1[40];
  3. //定义了一个数组大小为10的空数组
  4. char str_arr2[10]={'a', 'b', 'c'};
  5. //定义了一个数组大小为30的数组,且被用字符串"hello,world"初始化
  6. char str_arr2[30]="hello,world";

字符串与字符数组

字符串是一个常量,通常用一对双引号引起来的一些字符

"this is a string" 是一个字符串

字符串末尾有一个隐藏\0,用以表明字符串结束
这个隐藏的字符不用程序员来手动添加,系统会自动添加

\0只是一个字符串结束标志,计算字符串长度以及输出字符串不会包含它

字符串可以用字符数组来存储,但字符数组不是字符串
比如:

  1. char abc1[10]={'s','t','r','i','n','g'};
  2. char abc2[10]="string";

abc1abc2 是两个字符数组,但是 abc1存储的6个字符,abc2存储个一个长度为6的字符串,但是有7个字符,末尾字符为\0

数组作为函数参数

一般情况下,作为函数的参数,其值在函数内部发生改变,不影响其在主调函数的值
因为当函数的形式参数是函数的局域变量,而在函数调用的时候只是把主调函数内部的变量的只传递过来而已

数组作为函数参数,函数内部的数组的操作,其结果也会被带到函数外部
即 数组的每一个元素的值在函数内部发生改变,那么在主调函数中,值也发生改变

程序

  1. #import {
  2. splos_io.p; //导入标准输入输出模块
  3. }
  4. void func(int a[], int n)
  5. {
  6. int i;
  7. i = 0;
  8. while(i < n) {
  9. a[i] = a[i] + i;
  10. }
  11. }
  12. void print(int a[], int n)
  13. {
  14. int i;
  15. i = 0;
  16. while(i < n) {
  17. sp_printf_num(a[i]);
  18. sp_printf_char(' ');
  19. }
  20. }
  21. int main()
  22. {
  23. int arr[10] = {1,2,3,4,5,6,7,8,9,10};
  24. func(arr, 10);
  25. print(arr, 10);;
  26. return 0;
  27. }

说明:
1. splos_io.pSPLOS 语言的标准输入输出库,内含输入输出的函数
2. func 是自定义的一个函数,用数组作为形式参数,功能:把数组中的每一个元素值都加上一个数字
3. print 函数是自定义的一个输出函数,把数组输出
4. 通过运行程序可以看出,在main函数中定义的数组的值在经过调用func,数组的值已发生改变

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注