1.为什么要学习数组?
总结:有时候需要定义很多变量,如果用一般的定义方式显得麻烦,并且容易出错,所以就引用数组的这个概念。
2、怎么定义数组?
比如:
int nun[4]; //数据类型 数组名[常量]; 常量:5 3+2;
int add(int n)
{
int num[n]; //不符合C语言标准,建议大家不要这么使用;
}
3、怎么使用数组?
定义的是时候呢,你可以整体定义;但是使用的使用必须一个一个使用:
通过下标,int num[4];
num[0]:使用数组中第一个元素;
num[1]:使用数组中第二个元素;
以此类推;但是最后一个数组是 int a[N];===>a[N - 1];
非要使用:a[N]; //大家不要越界使用,学习语言语言的时候根据规定来,语言相当于一个使用使用说明书,你是学习它的,不是改变他的;
4、怎么初始化数组?
分为两类:
1、完全初始化:int a[4] = {1,2,3,4};
2、不完全初始化:int a[3] = {33};
a[0] = 33,a[1] = 0; a[2] = 0;
对a[0],a[1],a[2]值的分析:
正常分析的话:三种情况:①都是33;②第一个是33,后面的都是0;③11 11 11;
学习方法:学习 = 基础知识 + 合理推断;
没有基础知识,再强的合理推断也没用;
但是即使你有了基础知识作为铺垫,没有合理推断能力,那也是死记硬背!
小结:基础知识和合理推断两者缺一不可。
int a[3] = {}; //a[0] = 0,a[1] = 0,a[2] = 0;
int a[3] = {0}; //跟上面是等价的;
int a[3]; //没有初始化的,随机值
5.二维数组
int a[N][M]; //N,M 是常量。
int a[3][4]; //二维数组由3个一维数组组成,然后每个一维数组里面包含了4个元素。
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
二维数组在内存中的存储方式:按行存放,先放第一行,再放第二行。。。。。依次类推。
6.字符数组
char ch[4] = {'a','b'..};
char ch[] = {"HelloWorld"};
char ch[11] = {"HelloWorld"};
字符串的结尾标志是'\0';
遍历字符串的时候,遍历是'\0'默认为字符串结束了,然后'\0'前面的字符就是字符串的内容;
输入字符串的时候:hello 系统会自动在o后面加上一个'\0'表示字符串结束;
‘\0’占存储空间的;
sizeof(ch); //11,因为'\0'占存储空间的;
strlen(ch); //10,因为'\0'表示字符串结束,字符串的真正内容是'\0'前面的字符,当然不算'\0';
‘\0’在ASCII表中为0,什么都不显示。
int a[5] = {1,2,3,4,5};
sizeof(a); //定义了整型数组,然后数组元素是5个,每一个整型数所占字节是4个字节,那么5个:4*5 = 20。
sizeof(a)/sizeof(a[0]); //实现的功能是求出数组个数。
总结:
也不知道是我学艺不精还是怎么回事,数组学完之后OJ上的题后面的题没有任何思路,还要看着别人的或者问别人去练习代码,不过我自己看答案能看懂,看答案的时候也会试着优化一下答案,找出不同的方法来实现结果。由于时间的原因,我想快点学过去,等书看完了再转回来自己去用心做做吧,到时候看有没有进步,这几天写代码出现的问题没之前刚开始的时候那么多了,不过还是有些值得注意的新问题。
数组和for循环真是好伙伴,而二维数组也挺好理解,一般就用双重循环,巧妙的利用循环和改变下标来控制数组。说简单也简单说难也挺难得,需要多多联系才可以。
数组和for循环真是好伙伴,而二维数组也挺好理解,一般就用双重循环,巧妙的利用循环和改变下标来控制数组。说简单也简单说难也挺难得,需要多多联系才可以。