c++学习笔记(2)数组,函数,指针,结构体
目录
1、一维数组
一维数组定义的三种方式:
1。数据类型 数组名[数组长度];
2。数据类型 数组名[数组长度] = {值1,值2.。。。。};
3。数据类型 数组名[] = {值1,值2.。。。。}; 可推测出长度
数组特点 连续存储空间,每个元素相同数据类型
未定义的用0填补
定义数组时必须知道初始长度
命名规范与变量相同
sizeof(arr) 求数组长度
cout<<arr<<endl; 输出数组在内存中首地址
cout<<int(arr)<<endl; 输出数组在内存中首地址(十进制) 如果报错说明超过int取值范围,可改为long
数组名是常量,不可以进行赋值
2、二维数组
四种定义方式:
1.数据类型 数组名[行数][列数];
2.数据类型 数组名[行数][列数] = {{数据,数据},{},{}}; 常用
3.数据类型 数组名[行数][列数] ={数据1,数据2,3,4};
4.数据类型 数组名[ ][列数] ={数据1,数据2,3,4};
3、函数
返回值类型 函数名 (参数列表) void为空
{
函数体语句;
return表达式;
}
值传递:函数调用时实参将数值传入给形参,值传递时,如果形参发生变化,并不会影响实参
常见函数样式:无参无返 有参无返 无参有返 有参有返
函数声明:告诉编译器函数名称及如何调用函数,函数的实际主体可以单独定义。函数的声明可以多次,函数定义只有一次eg:int max(int a,int b);
4、函数分文件编写:
1.创建.h头文件
2.创建.cpp源文件
3.在头文件中写函数的声明
4.在源文件中写函数的定义
在使用的cpp文件中先添加对应的头文件
5、指针
5.1 定义指针
定义指针 int a = 10;
int * p;
p = &a;
使用指针 可以通过解引用的方式来找到指针指向的内存
在32位操作系统下x86,指针占4字节,64位占8字节x64
空指针 指针变量指向内存中编号为0的空间
用途:初始化指针变量 int *p = NULL
注意:空指针指向的内存是不可以访问的 内存编号0-255为系统占用内存,不允许用户访问
野指针:指针变量指向非法的内存空间
如:int * p = (int*)0x1100;访问会报错
空指针和野指针都不是我们申请的空间,因此不要访问
5.2const修饰指针 (const后面的值不可以改)
int a = 10;
int b = 10;
int *p = &a;
1.const修饰指针 常量指针
const int *p=&a;
指针的指向可以改,但指向的值不能改
*p = 20; 错误,指向的值不可改
p=&b; 正确,指针指向可以改
2.const修饰常量 指针常量
int * const p = &a;
指针的指向不可以改,指针指向的值可以改
*p = 20; 正确,指向的值可改
p=&b; 错误,指针指向不可改
3.const既修饰指针,又修饰常量
const int *const p=&a;
指针的指向和指针指向的值都不能改
5.3指针访问数组
int arr[10] = {1,2,3};
int * p = arr;
for (int i = 0;i<3;i++)
{
cout<<*p<<endl;
p++;
}
地址传递可以修饰实参
6、结构体
结构体属于用户自定义的数据类型,允许用户存储不同的数据类型
语法:struct 结构体名 {结构体成员列表};
结构体创建变量:
struct 结构体名 变量名
struct 结构体名 变量名={成员1值,成员2值。。。}
定义结构体时顺便创建变量
结构体创建时可以省略struct关键字,定义时不能省略
// 创建结构体
struct Student {
string name;
int age;
int score;
}s3;
示例:
int main() {
// 利用结构体创建变量
//1
struct Student s1;
s1.age = 20;
s1.name = "张三";
s1.score = 90;
cout << "张三" << s1.name << s1.age << s1.score << endl;
//2
struct Student s2 = { "李四",22,91 };
cout << s2.name << " " << s2.age << " " << s2.score << endl;
//3
s3.age = 23;
s3.name = "王五";
s3.score = 93;
cout << s3.name << " " << s3.age << " " << s3.score << endl;
结构体数组 将自定义的结构体放入数组中方便维护
语法 struct 结构体名 数组名[元素个数] = { {},{},{}。。。 }
结构体指针
通过指针指向结构体变量
Student *p = &s1;
cout <<p->name<<p->age<<p->score<<endl;
结构体嵌套结构体 结构体的成员可以是另一个结构体
创建:t.stu.name = "zhangsan"; t 和stu都是结构体
结构体做函数参数 值传递 地址传递
将函数中的形参改为指针,可以节省内存空间,而且不会复制新的副本
结构体使用const 防止误操作
void printstudent(const student *s){}