c语言之一维数组

1.数组的定义

变量类型  数组名 [元素个数] = {数值1,  数值2,数值3.....}

定义的几种形式

a. int a[5] = {1, 2,  3,  4, 5};

b. int a[] = {1, 2, 3, 4, 5}; //可以省略个数

c. int a[5] = {1}; //默认第一个为1, 其余的为 0

注意:数组不能直接参加运算,数组的元素可以;eg: int a[2] = {4, 5}; int b[2] = {8, 9}; a + b 这是错误的。

          数组的下标是从 0 开始的 故个数为5的数组的下标是从 0 - 4的

          注意不能越界 int a[5] = {1, 2, 3, 4, 5, 6};后面有6个元素,前面定义的个数为5,这样就出现越界现象,很危险


使用

数组名[数组下标];

2.字符数组

定义

char a[5] = {'a', 'p', 'p', 'l',  'e'};

char a[] = {'a', 'b', 'p', 'p', 'e'};

char a[5] = {'a'};//默认第一个a[0] = 'a' 其余的为'\0'

使用

数组名[数组下标];

字符串:

char a[5] = "apple";

char a[5] = "apple"; 定义的格式与 char a[5] ={'a', 'p', 'p',' l','e'};是完全等价的。

其中数组个数都为5;

字符串格式可以用 %s输出 ,输出的时候遇到'\0'结束

对于 char a[5] = {'a', 'p', 'p','l', 'e'}; 使用 %s 输出可能是错误的, %s 遇到 '\0'输出结束 在输出 a数组时可能输出apple后没有遇到'\0' 这样的话会把'\0'之前的东西都输出来 

char a[6] = {'a' ,'p', 'p', 'l', 'e' , '\0'}; 和 char a[] = "apple";是等价的

char a[] = "apple";定义之后在apple后面自动加了个'\0' 其实它在电脑上存的时候也是存的' a' ,'p', 'p', 'l', 'e' , '\0'

在使用字符数组时注意越界和结束的标志,以防止越界的情况发生

字符串函数

字符串链接函数:strcat(数组1,数组2);把数组2链接到数组1的后面遇到\0结束 ,数组1 的长度要足够大

字符串的复制函数:strcpy(数组1,数组2);把数组2 复制到数组1中 遇到\0结束

字符串的比较函数:strcmp(数组1, 数组2);用字符串1中的每个元素和对应位置字符串2中的元素的ASCII值相减,如果不为零就继续比较;如果不为0,就返回差值;当对应的元素都是'\0'时,比较停止,返回结果0

字符串计算长度的函数:strlen(数组);遇到'\0'结束'\0'不计入长度之内  char a[] = "apple";在内存中占到6个字节 但是用strlen(a)计算出来的却是5 就是因为'\0'不计入长度之内;

char占据一个字节 short 两个字节 int 4个字节 long 8个字节 float 4个字节 double 4-8个字节(32位机器4个字节 64位机器8个字节)

有符号char 占据的大小为 - 2的7次方到2的7次方 - 1;

无符号char 占据的大小为 0到2的8次方 - 1;

同样 short 无符号则为0 - 2的16次方 - 1;有符号为 -2的15次方到 2的15次方 - 1

计算数据类型或变量所占字节数可以用函数sizeof(数据类型 或 变量名)

例如可以使用sizeof(int); 或者是 int a = 0; sizeof(a);返回的时无符号长整形 %lu

在整型数组若不知道长度可以使用如下方法

int a[] = {1, 2, 3, 4};

sizeof(a) / sizeof(a[0]);//用整个数组所占的字节数除以一个数据所占的字节数 这样便可以计算出该数组有几个数据






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章