C++基础--函数、结构体和指针


函数

  • 作用: 将一段经常使用的代码进行封装,减少代码的重复;
  • 函数的定义:
  • 步骤
    ○ 返回值类型
    ○ 函数名
    ○ 参数列表
    ○ 函数体语句
    ○ 返回语句
  • 语法:
//
// Created by NJUST'er'wang's on 2022/1/11.
//函数
#include <iostream>

using namespace std;
//函数定义
int add(int a, int b) {//a,b没有实际的值,称为形参——形式上的参数
    return a + b;
}

int main() {
    int num1 = 1, num2 = 1;
    //函数调用
    int ans = add(num1, num2);
    cout << "ans=" << ans;
    return 0;
}
/*
ans=2
*/

  • 值传递
    ○ 改变形参,不改变实参的数据
//
// Created by NJUST'er'wang's on 2022/1/11.
//值传递

#include <iostream>
using namespace std;
//定义函数
void swap(int a,int b){
    int tmp = a;
    a = b;
    b = tmp;
    cout<<"swap:"<<endl;
    cout<<"a="<<a<<' '<<"b="<<b<<endl;
}

int main()
{
    int a = 1,b=2;
    cout<<"开始前:"<<endl;
    cout<<"a="<<a<<' '<<"b="<<b<<endl;
    swap(a,b);
    cout<<"main:"<<endl;
    cout<<"a="<<a<<' '<<"b="<<b;
}
/*
开始前:
a=1 b=2
swap:
a=2 b=1
main:
a=1 b=2
*/
  • 函数常见形式
    ○ 无参无返
    ○ 有参无返
    ○ 无参有返
    ○ 有参有返
//
// Created by NJUST'er'wang's on 2022/1/11
//常用函数类型
#include <iostream>

using namespace std;

void fun1() { cout << "无参无返!" << endl; }

void fun2(int a) { cout << "有参无返!" << endl; }

int fun3() {
    cout << "无参有返!" << endl;
    return 0;
}

int fun4(int a) {
    cout << "有参有返!" << endl;
    return 0;
}

int main() {
    fun1();//  无参无返
    int a = 0;//  有参无返
    fun2(a);
    fun3();//  无参有返
    int b = fun4(a); //  有参有返
    return 0;
}
/*
无参无返!
有参无返!
无参有返!
有参有返!
*/
  • 函数声明
    ○ 为了告诉编译器有该函数存在

  • 函数的分文件编写
    ○ 在头文件中创建 .h 文件
    ○ 在源文件中创建 .cpp 文件
    ○ 在头文件中写函数的声明
    ○ 在源文件中写函数的定义

    指针

    定义

  • 语法:数据类型 *指针变量名;

//
// Created by NJUST'er'wang's on 2022/1/11.
//指针
#include <iostream>

using namespace std;

int main() {
    int a = 1;
    int *p = &a;
    cout << "a的地址:\t" << &a << endl;
    cout << "p的值:\t\t" << p << endl;
    //解引用
    cout << "p的值为:\t\t" << *p << endl;
    return 0;
}
/*
a的地址:       0xfdbffffca4
p的值:         0xfdbffffca4
p的值为:               1
*/

指针内存

  • 所占空间与计算机操作系统有关
    ○ 32位操作系统下指针大小占4个字节
    ○ 64位操作系统下指针大小占8个字节
//
// Created by NJUST'er'wang's on 2022/1/11.
//指针大小
#include <iostream>
using namespace std;
int main()
{
    cout<<"各类数据类型指针的大小:"<<endl;
    cout<<"char:\t\t"<< sizeof(char *)<<endl;
    cout<<"int:\t\t"<< sizeof(int *)<<endl;
    cout<<"long:\t\t"<< sizeof(long *)<<endl;
    cout<<"long long:\t"<< sizeof(long long *)<<endl;
    cout<<"float:\t\t"<< sizeof(float *)<<endl;
    cout<<"double:\t\t"<< sizeof(double *)<<endl;
    return 0;
}
/*
各类数据类型指针的大小:
char:           8
int:            8
long:           8
long long:      8
float:          8
double:         8
*/

空指针和野指针

● 空指针:指针变量指向内存中编号为0的空间
○ 用途:初始化指针变量;
○ 注意:空指针指向的内存是不可以访问的;
● 野指针:指针变量指向非法的内存空间

int a = 1;
const int *p = &a;
/*
常量指针:
指针的指向可以修改
但是指针指向的内容不能修改(不能用解引用更改指针指向的值)
*/

● const 修饰常量:指针常量

int b = 2;
int * const p = &b;
/*
指针常量:
指针的指向不能修改
指针指向的值可以修改
*/

● const 修饰指针又修饰常量

int c = 3;
const int * const p = &c;
/*
指针指向和指针所指的内容都不可以改变
*/

● 记忆方法:将英文翻译中文(看 const 与 * 的位置)

    const int *p = &a;
/*   常量     指针    */
    int * const p = &b;
/*    指针  常量      */

指针的相关应用

指针和数组

//
// Created by NJUST'er'wang's on 2022/1/11.
//指针和数组

#include <iostream>
using namespace std;
int main()
{
    int arr[7] = {1,2,3,4,5,6,7};
    int * p = arr;
    //指针访问数组
    cout<<"一般访问:"<<endl;
    for(int i = 0;i<7;i++){
        cout<<arr[i]<<' ';
    }
    cout<<endl;
    cout<<"利用指针进行访问:"<<endl;
    for(int i = 0; i<7;i++)
    {
        cout<<*p++<<' ';
    }
    cout<<endl;
    return 0;
}
/*
一般访问:
1 2 3 4 5 6 7
利用指针进行访问:
1 2 3 4 5 6 7
*/

指针和函数

//
// Created by NJUST'er'wang's on 2022/1/11.
//指针和函数
#include <iostream>
using namespace std;
void swap(int *p1,int *p2)
{
    int a = *p1;
    *p1 = *p2;
    *p2 = a;
}

int main()
{
    int a = 1, b = 2;
    cout<<"交换前:a= "<<a<<' '<<"b= "<<b<<endl;
    swap(&a,&b);
    cout<<"交换后:a= "<<a<<' '<<"b= "<<b<<endl;
    return 0;
}
/*
交换前:a= 1 b= 2
交换后:a= 2 b= 1
*/

结构体

基本概念

  • 结构体属于用户自定义的数据类型,允许用户存储不同的数据类型

  • 定义和使用
    语法:struct 结构体名{ 成员列表 };

struct Person{
	string name;
    int age;
};
  • 创建变量:(创建变量时关键字 struct 可以省略)
    ○ struct 结构体名 变量名;
struct Person p1;
p1.name = "Boss_Song";
p1.age = 20;

○ struct 结构体名 变量名 = {数据值}

struct Person p2 = {"Boss_Song", 20 };

○ 定义结构体时创建

struct Person{
	string name;
    int age;
}p3;
p3.name = "Boss_Song";
p3.age = 20;

结构体数组

  • 将结构体看做一个数据类型,如上文中自己定义了一个 Person 类型的数据。创建数组时和普通的数据类型差不多:
struct Person p[2] = {
    {"张三", 19}{"罗翔", 35},
};

结构体指针

  • 和基本数据类型差不多的使用方法
struct Person * p = &p1;
//访问属性
cout<<"输出姓名:"<< p -> name;

● 指针访问时,用 -> 比较快捷

  • 结构体中的const
//
// Created by NJUST'er'wang's on 2022/1/11.
//结构体中的const
#include <iostream>

using namespace std;

#include <string>

struct Person {
    string name;
    int age;
};

//值传递
void print(struct Person p) {
    cout << "值传递:" << endl;
    cout << "name: " << p.name << "\t" << "age: " << p.age << endl;
}

//地址传递
void print1(const Person *p1) {//加入const防止误操作修改数据
    cout << "地址传递:" << endl;
    cout << "name: " << p1->name << "\t" << "age: " << p1->age << endl;
}

int main() {
    Person p1 = {"Boss", 20};
    print(p1);
    print1(&p1);
    return 0;
}
/*
值传递:
name: Boss      age: 20
地址传递:
name: Boss      age: 20
*/

Never Give up!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拜见老天師

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值