C++学习笔记——第一天

本文详细介绍了C语言中的变量概念、数据类型(包括整型、实型、字符型和布尔型)、数组的特点、内存管理和操作,以及函数的声明、定义、调用、值传递、重载和常量的使用。还展示了数组逆置、冒泡排序和成绩统计等实用示例。
摘要由CSDN通过智能技术生成

一、变量

变量定义

rj:内存空间地址的面向程序员名称

变量的创建

//数据类型 变量名=变量初始值;
int a=10;

数据类型一

存在意义:给变量分配合适的空间

 占用空间查询方法:sizeof(数据类型、变量) 返回__字节

  1. 整形:short:-32768-32767 short=32768会输出-32767
  2. 实型(浮点型):默认双精度double更加精准,表示单精度float数字后加f  ;默认情况下两者输出一个小数  显示6位有效数字,多显示需要配置  ;    
  3. 字符型:char ch='a';char C++中占1字节; 底层将对应的阿斯克码存入内存:(int)变量名可查看:a~97,A~65;    转义字符:表示特殊符号  用法:直接在输出""中跟上 
  4. 字符串型:c语言:char 变量名[]=“字符串值”;输出用变量名;c++中仍然延用                    c++: string 变量名=“字符串值”;需要包含头文件#include <string>
  5. 布尔型:bool flag=true;1字节;打印结果为1;

数据类型二

数组特点:相同的数据类型放在从数组名(是常量)地址开始的连续的虚拟内存空间中,可以通过下标访问数组中的元素

数组占用空间查询方法:sizeof(数组名)

数组元素个数:sizeof(数组名)/sizeof(数组名[0])

//二维数组中sizeof(数组名[0])代表第一行,sizeof(arr[0][0])代表一个元素所占内存

//二维数组行数:sizeof(数组名)/sizeof(数组名[0])

//二维数组列数:sizeof(数组名[0])/sizeof(数组名[0][0])

数组首地址查询方法:打印数组名 (int)arr十进制

数组元素首地址:(int)&arr[0] 取址符

  1. 一维数组 
    //数据类型 数组名[数组长度];
    //一个一个赋值
    int arr[5];
    arr[0]=10;
    arr[1]=20;
    
    //数据类型 数组名[数组长度]={值1,值2...};
    //初始时没有全部填写,会用0来填充
    int arr[5]={10,20,30,40,50};
    
    //数据类型 数组名[不用放长度]={值1,值2...};
    //只有初始化才能不放长度
    int arr[]={10,20,30,40,50};
    
    //检查输出
    for(int i=0;i<5;i++){
        cout<<arr[i]<<endl;
    }

    应用:数组元素逆置

    //数组元素的逆置
    int arr[5]={1,2,3,4,5};
    cout<<"数组逆置前:"<<endl;
    for(int i=0;i<5;i++){
        cout<<arr[i]<<endl;
    }
    
    int start=0;
    int end=sizeof(arr)/sizeof(arr[0])-1;
    
    while(start<end){
        int temp=arr[start];
        arr[start]=arr[end];
        arr[end]=temp;
    
        start++;
        end--;
    }
    
    cout<<"数组逆置后:"<<endl;
    for(int i=0;i<5;i++){
        cout<<arr[i]<<endl;
    }

    应用:冒泡排序

    int arr[9]={4,2,8,0,5,7,3,9}
    
    //排序总轮数=元素个数-1
    //每轮对比次数=元素个数-当前排序轮数-1
    //rj:只要知道次数就行
    
    int num=8;
    while(num>0){
        int start=0;
        while(start<num){
            if(arr[start]>arr[start+1]){
                int temp=arr[start];
                arr[start]=arr[start+1];
                arr[start+1]=temp;
            }
            start++;
        }
        num--;    
    }
    
    //i仅代表个数,j牵涉数组下标
    //最好是升序思想
    for(int i=0;i<9-1;i++){
        for(int j=0;i<9-i-1;j++){
            if(arr[j]>arr[j+1]){
                int temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
  2. 二维数组
    //数据类型 数组名[行数][列数];
    //一个一个赋值
    int arr[2][3];
    arr[0][0]=1;
    arr[0][1]=2;
    //1 2 3
    //4 5 6
    
    //数据类型 数组名[行数][列数]={{数据1,数据2},{数据3,数据4}};
    int arr[2][3]=
    {
        {1,2,3},
        {4,5,6}
    };
    
    //数据类型 数组名[行数][列数]={数据1,数据2,数据3};
    //程序是可以划分执行的
    int arr[2][3]={1,2,3,4,5,6};
    
    //数据类型 数组名[][列数]={数据1,数据2,数据3};
    //程序可划分
    int arr[][3]={1,2,3,4,5,6};
    
    //外层循环打印行数,内层循环打印列数
    for(int i=0;i<2;i++){
        for(int j=0;j<3;j++){
            cout<<arr[i][j]<<" ";
        }
        cout<<endl;
    }

    应用:考试成绩统计

    #include <string>
    
    int scores[3][3]={
        {100,100,100},
        {90,50,100},
        {60,70,80}
    };
    
    //使输出更灵活,用数组变量代替与i绑定
    string name[3]={"张三","李四","王五"};
    
    for(int i=0;i<3,i++){
        int sum=0;
        for(int j=0;j<3;j++){
            sum+=scores[i][j];
        }
        cout<<name[i]<<"的总分为:"<<sum<<endl;
    }

特殊数据类型三

函数声明、定义及调用 目的:封装一些功能 
int add(int num1,int num2);

/*
返回值类型 函数名(参数列表){
    函数体语句;
    return 表达式;
}
不需要返回值:返回值类型写void,不写return
*/

int add(int num1,int num2){
    int sum=num1+num2;
    return sum;
}

//main中:函数名(参数)
int c=add(a,b);

 其中num1,num2是形参,a,b是实参

值传递:形参发生改变,并不会影响实参

函数的声明:用途:提前告诉编译器函数的存在;注意:声明可以多次,编译只能有一次

int max(int a,int b);
 函数的默认参数:声明和赋值不能都有默认参数;不能隔一个赋值
int func(int a,int b=10,int c=30){
    return a+b+c;
}

cout<<func(10)<<endl;//正常输出50
cout<<func(10,20)<<endl;//正常输出60
 函数的占位参数:占位参数在函数体中用不到;可以有默认参数
void func(int a,int){
    cout<<"this is func"<<endl;
}

func(10,20);
 函数重载:作用域相同?函数名称相同,增加复用性;参数类型(const int和int)或个数或顺序不同;

注意1:返回值不同不是重载条件:有返回值可以不接收

注意2:引用作为函数重载的条件

void func(int &a){
    cout<<"func(int &a)调用"<<endl;
}
void func(const int &a){
    cout<<"func(const int &a)调用"<<endl;
}


func(10);//func(const int &a)调用:int &a=10不合法

int a=10;
func(a);//func(int &a)调用

注意3:函数重载遇到默认参数

void func(int a){
    cout<<"func(int a)的调用"<<endl;
}
void func(int a,int b=10){
    cout<<"func(int a,int b)的调用"<<endl;
}//有默认参数

func(10);//报错,需避免
func(10,20);//func(int a,int b)的调用

二、常量

常量定义

rj:不可更改的数据

  1. 宏常量:通常在文件最上方定义
  2. const修饰的变量

常量的创建

#define Day 7
const int month=12;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值