前言:
数组用于处理同类型数据的集合,它是把相同格式类型的数据元素组合到一起的的容器或者说是工具。有了数组这个工具,我们的代码和编程工作变得极为方便,不用一个一个定义数据了。一个数组在内存中占据一片连续的存储单元。
一、数组知识总结及使用过程中的注意事项:
1、数组大小必须是指值为正的常量,不能为变量。一旦定义不能改变大小。
2、数组大小最好用宏来定义。
3、数组定义后需要赋初值,不然仍然是随机数。
4、 对数组的赋值可用循环来做,二维数组用循环嵌套赋值或是输入输出。包含在头文件#include中的函数memset可以对数组进行清零处理,但不可以对整型变量进行正常赋值,因为memset是对字节赋值的,对char类变量单个赋值是没有问题的。
5、int a[5]={}表示数组中的5个元素都初始化为0。int a[10]={0,1,2}表示对数组前三个元素赋值为0.1.2,其余元素赋值为0。
二、关于字符数组
1、举例:'a’表示一个字符,只有字符a,而"a"是字符串,包含a和 。引用字符空格应用单引号。
2、输入问题:由scanf得到的字符串不会有空格,回车即使下一段。使用gets只能输入一个字符串,可以得到包含空格的字符串。个人感觉做题的时候scanf比cin好用,效率更高。
3、puts语句输出一个字符串和一个换行符。
三、访问数组元素
int arr1[3] = {1, 2, 3}; //满初始化 int arr2[] = {1, 2, 3}; //省略数组大小,由元素个数决定; int arr3[3] = {1, 2}; //缺少的默认为0 int arr4[3] = {1, 2, 3, 4}; //错误,不能超过数组长度 char arr5[3] = {'a', 98, 'c'};//因为是字符类型,所以98其实就是字符'b' char arr6[] = "abcdef"; //直接用双引号写字符串
数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后边。
数组是使用下标来访问的,下标是从0开始。
数组的大小可以通过计算得到。(size = sizeof(arr)/sizeof(arr[0]));
#include "stdafx.h" int main() { //int变量先定义后初始化 int a; a = 10; //变量a的大小就是int的大小 printf("sizeof(a) = %d ", sizeof(a)); printf("sizeof(int) = %d ", sizeof(int)); int arr[10]={0}; //a[0]--a[9] printf("sizeof(arr) = %d ", sizeof(arr)); //sizeof(arr)等于求解int*10大小
for(int i=0;i<10;i++) { arr[i] = a++; //循环打印每个地址的数据,以及相应的地址 printf("arr[%d]=%d,addr:%p ", i, arr[i],&arr[i]); } getchar(); return 0; }
补充:结构体的作用
- 在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
- 结构体在函数中的作用不是简便,最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。
#include <iostream> using namespace std; struct SAMPLE { int x; int y; int add() {return x+y;} }s1; int main() { cout<<"没初始化成员变量的情况下:"<<s1.add()<<endl; s1.x = 3; s1.y = 4; cout<<"初始化成员变量的情况下:"<<s1.add()<<endl; system("pause"); return 0; } =>没初始化成员变量的情况下:0 初始化成员变量的情况下:7
struct Student { int a; }stu1;//stu1是一个变量 typedef struct Student2 { int a; }stu2;//stu2是一个结构体类型 //使用时可以直接访问stu1.a //但是stu2则必须先 stu2 s2; //然后 s2.a=10;
#include <iostream> using namespace std; typedef struct _point{ int x; int y; }point; //定义类,给类一个别名 struct _hello{ int x,y; } hello; //同时定义类和对象 int main() { point pt1; pt1.x = 2; pt1.y = 5; cout<< "ptpt1.x=" << pt1.x << "pt.y=" <<pt1.y <<endl; //hello pt2; //pt2.x = 8; //pt2.y =10; //cout<<"pt2pt2.x="<< pt2.x <<"pt2.y="<<pt2.y <<endl; //上面的hello pt2;这一行编译将不能通过. 为什么? //因为hello是被定义了的对象实例了. //正确做法如下: 用hello.x和hello.y hello.x = 8; hello.y = 10; cout<< "hellohello.x=" << hello.x << "hello.y=" <<hello.y <<endl; return 0; }
参考链接:https://blog.csdn.net/weixin_43238423/article/details/85219289
https://blog.csdn.net/baidu_34933057/article/details/100983504