c语言的课学到指针了,今天看了看数组,来简单认识一下。
首先呢,数组之所以归到指针这一节里面,(指针就是地址),很显然,他其实也是个地址。那么数组是如何定义的呢?
一维数组
一维数组其实就是有序排列的一组数,我们来试着定义一个一维数组;
1,2,3,4,5,6,7
int a[6]
此时a[0]=1,a[1]=2,a[2]=3,......,a[6]=7
通过这个简单的例子,我们来总结一下,数组是如何定义的。
变量类型名 数组名[这组数的数字多少-1] (因为这组数的下标是由0开始的)
(就是这组数字的类型的名称,就是上述的1,2,...,7)
注意:中括号里面必须是一个确定的数字,并且是整型常量
像这样a[10.0]就是不行的;
int n;
int a[n];
这个也不行,因为n是一个不确定的数;
#define N 20
int a[5+N];
这个是正确的,因为N是一个确定的数。
像这样int a[5]={1,2,3,4,5,6},也是可以的,这个叫做给数组初始化;其中大括号里的数字的个数必须小于等于数组的下标加1,如果小于下标加1,如int a[5]={1,2};那么从a[2]到a[5]的所有元素的值都为0;如果大于数组的下标加1,系统就会出错。
中括号里的数字也可以省略,系统可以根据大括号里元素的个数,来确定中括号里数字的具体值。
那么我们该如何输出下标从1开始的一个数组呢?
#include <stdio.h>
int main()
{
int a[6];
int i;
for(i=1;i<=6;i++)
scanf("%d",&a[i]);
printf("%d",a[i]);
}
这样就可以实现数组的下标从1开始了。
二维数组
如果说一维数组只有一行的话,那么二维数组就是在一维数组的基础上多加了几行。
二维数组类似矩阵,我们现在来看一下二维数组如何定义。
int a[3][5]
其中3代表行数,5代表列数,这个二维数组下标展开如下
a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]
a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]
a[2][0] a[2][1] a[2][2] a[2][3] a[2][4]
由此可见行下标最大为行数减1,列下标最大为列数减1
行列式的转置中的关键语句为a[i][j]=a[j][i],行标与列标互换即可。
二维数组可以实现矩阵的相关运算,后面熟悉掌握后可以试着自己写写相关代码。
数组名虽然可以表示变量地址,但是应用scanf函数时一维数组和二维数组都要加&。
字符数组
与一维数组类似,字符数组也满足相应规则;
char 数组名[元素数]={元素初值列表}
注意这里i是元素的个数,相当于这个字符数组存储在a[0]到a[i-1]之间,a[i]存储结束标志"\0",这个标志必须有。
所以定义的元素数一定要大于实际使用的有效长度。
我们在输入输出时必须注意加“\0” 。
%c是逐个输入输出字符;
%s是整体输入输出字符;
关于字符串的控制就先说这么多,还有很多字符串的相关函数,今天先了解这么多。
另外用%s,整体输入输出时,应用scanf函数不用加取地址符号,直接写数组名,因为数组名就可以代表地址,只有整体输入输出才可以这样,其他数组元素单个输入输出必须加&。
欢迎大家发现错误积极留言,一起进步。