您的位置:首页 > 编程语言 > C语言/C++

C语言基础二_数组

2014-03-19 18:45 176 查看
数组:
1.定义方式:int a[5]; //在64bit环境下占用4*5=20个字节
不可以是 int[5] a;
int[] a;
int a[];
int b=5; int a[b;]
2.数组的地址和变量的地址一样,都是第一个元素的地址
查看数组的地址方式:
int ages[5];
printf("%d\n",&ages[0]);
printf("%d",ages);//数组名代表数组的地址,也就是第一个元素的地址,ages是一个常量。
3.一维数组的初始化
注意:C语言编译器不会对数组下标越界进行检查的
int a[]={8,10};//可以省略a[2]
错误的做法举例:
int a[3];
a[3]={1,2,3};//下标越界了
a={1,2,3};//a是一个常量
4.一位数组和函数参数
一维数组的元素作为函数实参,与同类型的简单变量作为实参一样,是单向的值传递,即数组元素的值传给形参,形参的改变不影响实参

// b是test函数的形参(形式参数)

void test(int b) {
b = 9;
}
int main()
{
int a[3];
a[0] = 10;
printf("函数调用前的a[0]:%d\n", a[0]);
test(a[0]);// a[0]是test函数的实参(实际参数)
printf("函数调用后的a[0]:%d", a[0]);
return 0;
}//结果是:函数调用前后a[10]都是10


若把a[]数组传去当形参,由于传的是a的地址,所以test函数会改变a数组中的值。
5.二维数组
数组a[2][3]中a[0],a[1]也是数组名,不用加& ,就已经代表了各自数组的地址
若a[0]的地址为0001,在16位环境下,每个元素4个字节
则:&a[0][0]的地址也是1230
a[1]的地址是3*4+1230=1242 等价:&a[1][0]的地址
6.二维数组的初始化
int a[2][3]={{2,3,4},{5,6,7}};
int b[2][3]={1,2,3,4};//顺序存,所以b[1][0]=4,b[1][1]=b[1][2]=0;
绝对不以省略列数,可以省略行数:b[2][]就是错的,但b[][3]就是对的。
7.字符串
一种方式是C语言通过字符数组声明字符串,与普通字符数组的区别在于,在字符数组的尾部加一个结束标志'\0'
所以字符串的长度是数组的长度+1
char s[]={'m','j','\0'}//这就代表一个字符串。
char s1[]="mj";//长度为3
输出方式:
printf("%s\n",s1);
puts(s);puts("mj");
方法区别:puts一次只能输出一个,printf可以输出多个
puts会自动换行
\0的作用:
char s1[]={'l','m','j','\0'};
char s2[]={'m','j'};
printf("%s",s2);//由于输出s,所以需要找到\0,打印出来mjlmj
puts(s2);//若以变量方式,由于puts是从s2开始打印,直到找到\0才停止,所以打印的结果是:mjlmj。
字符串输入:
char s2[]="mj";
char s1[2];
scanf("%s",s1);//s就是字符串的地址
gets(s1);
注:此函数不安全,会更改别的内存。
当输入itcast, 当printf("s1=%s , s2=%s",s1,s2);打印出:s1=itcast s2=cast
原因在于,打印的是s1s2内存中的内容,s1s2在内存中是从上到下存储的。输入s1:itcast时,s1在内存中的两个字节数据为it,输出s1需要找到\0,所以会 打印出itcast
输出s2时,s2的mj\0被cast\0所占,所以会打印s2内存开始的cast。如图

scanf输入时不接受空格,tab来分隔输入。
gets可以读入包含空格,tab的字符串,知道遇到回车为止
8.字符和字符串处理函数

<stdio.h>
int a=65
putchar(a);//A
putchar(65);//A
putchar('A');//A
char c;
c=getchar();
int len=strlen("lmj");//len=3,字符长度

char s[]="lmj";
char s1[]={'m','j'};
printf("%d\n",strlen(s1));//5    从s1地址开始直到遇到\0
--------------------
<string.h>
char a[10];
strcpy(a,"lmj");//a=lmj

char left[10]={'m','j','\0'};//left必须先声明长度,不然长度不够会内存溢出
strcat(left,"ios");//left="mjios"

int delta=strcmp("aBc","abc");
printf("%d",delta);//-32
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: