关于数组说明及其初值的分辨:
实例:(一)
int a[ ][4]={0,0};
示例:(二)
int a[3][4]={0};
类似于这两者的说明,数组a的每个元素都可得到初值0。
以此:
衍生到示例(三):int a[ ][3]={1,2,3,4,5,6,7};
其数组a中包含9个元素,且第一维大小为3.
对此与int a[ ][3]={1,2,3,4,5,6,7};做出对比——此二维数组的第一维大小为3.
值得注意的是:
int a[ ][4]={0,0};此二维数组a的第一维大小为1.
边缘知识(了解即可):
若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为i*m+j+1。
个人而言比起数字数组,字符数组难度更大。
首先就是搞清字符串与字符。
对两个字符数组进行初始化:
char a[ ]="ABCDEF";
char b[ ]={
'A', 'B', 'C', 'D', 'E', 'F'};
其中a的长度比b的长。字符串与字符。
scanf("%s%s", a, b);
是字符数组a,b的正确输入格式(在我以往的博客中提及过)。这不需要指令字符&。
关于字符数组的正确说法:
字符数组中可以存放ASCII字符集中的任何字符
字符数组的字符串可以整体输入、输出
不可以用关系运算符对字符数组中的字符串进行比较
字符数组输出遇’\0’会自动换行输出。
易错提示
单个字符的比较可用关系运算符;
但对于字符串这需要#include<string.h>头文件,才可调用
strcat strcmp strcpy strlen 等等函数进行字符串之间的应用。
细节错误提示(大多数初学者的常犯错误)
char s[5]=“abcde”;
此类对数组s的初始化是错误的,对此作为初学者的我进行了一番对比证实
未去掉e:
#include<stdio.h>
int main()
{
char s[5]="abcde";
puts(s);
}
运行结果:
去掉e之后:
#include<stdio.h>
int main()
{
char s[5]="abcd";
puts(s);
}
运行结果:
原因在于字符数组中’\0’也要占用存储单元。未注意到这点会导致乱码。
判断两个字符串是否相等,正确语句
if (!strcmp(a,b))
特别说明这段语句是因为平时常用的是if(strcmp(a,b)>0)
if(strcmp(a,b)<0) if(strcmp(a,b)==0)
算是知识盲区了。
之后会有有意思的编程题,进行分享。