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函数的形参(形式参数)
若把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.字符和字符串处理函数
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
相关文章推荐
- 13.java语言基础-数组的动态初始化和内存分析
- C语言基础—数组和字符串
- 黑马程序员--02.Java语言基础--04.【数组中常见的算法】
- java语言基础06数组
- C++语言基础 例程 对象数组
- Java 语言基础之数组应用
- day05<Java语言基础--数组>
- jsp语言基础5--数组
- Linux-C基础知识学习:C语言作业-将5个学生成绩保存在一个数组中,单独实现一个计算平均成绩的average函数, 在main函数中获取该函数返回的平均值,并打印。
- Java语言基础:基本数组类型
- C语言基础--数组及相关
- 黑马程序员---c语言基础---数组、指针
- C语言基础之数组
- C语言基础(四)指针 数组
- Java语言基础(函数和数组)
- Ruby语言基础学习七:Ruby字符串、数组、
- 黑马程序员——Java语言基础——02.java语言基础组成(4)数组及常用排序方法
- 黑马程序员_C语言基础_数组之冒泡排序、快速选择排序、折半查找
- java语言基础——System类的数组拷贝方法
- C语言基础知识学习(数组)