前言:
数组用于处理同类型数据的集合,它是把相同格式类型的数据元素组合到一起的的容器或者说是工具。有了数组这个工具,我们的代码和编程工作变得极为方便,不用一个一个定义数据了。一个数组在内存中占据一片连续的存储单元。
一、数组知识总结及使用过程中的注意事项:
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和\0。引用字符空格应用单引号。
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\n", sizeof(a));
printf("sizeof(int) = %d\n", sizeof(int));
int arr[10]={0}; //a[0]--a[9]
printf("sizeof(arr) = %d\n", sizeof(arr)); //sizeof(arr)等于求解int*10大小for(int i=0;i<10;i++)
{
arr[i] = a++;
//循环打印每个地址的数据,以及相应的地址
printf("arr[%d]=%d,addr:%p\n", 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
原文链接: https://www.cnblogs.com/shierlou-123/p/12391951.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/193809
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!