C++笔记②

发布于:2022-11-05 ⋅ 阅读:(369) ⋅ 点赞:(0)

目录

函数相关

函数定义

指针

定义指针

怎么使用指针

指针占用的内存空间

空指针

野指针

const修饰指针

常量指针

指针常量

const既修饰指针,又修饰常量

指针和数组

指针和函数

值传递和地址传递

结构体

定义和使用

结构体数组

结构体指针

c++中随机数调用


函数相关

函数定义

返回值类型  函数名 (参数列表)

{

函数体语句,return 表达式

}

函数的常见样式

1.无参无返
void test1()
{

}
2有参无返
void test2(int a)
{

}
3.无参有返
int test3()
{

return 0;//返回结果
}
4.有参有返
int test4(int b)
{

    return b;//finally return a int number b
}

int main()
{
    test1();
    
    test2(100);
    
    int num1;
    num1=test3;

    int num2;
    num2=test(1000)// now is ecqual to b is 1000;

return 0;
}

函数分文件编写

****.h头文件----函数声明

****.cpp_写函数定义

(写函数声明时也要把<iostream> 和namespace加进去  namespace存疑

源文件中写函数定义,要加#include " ****.h"  <记得有双引号,表示是我们自己的>

指针

可以通过指针保存地址,这个地址存放着一个数据

定义指针

定义指针语法:
数据类型  * 指针变量名
int * p
记录地址
p = & a    //让指针p 记录变量a的地址

怎么使用指针

使用解引用的方式找到指针指向的内存

*p    //解引用,找到指针p指向内存的数据

指针占用的内存空间

 32位操作系统中占4个字节

eg:int *p=&a

cout<<"size of (int *)="<<size of(int *)<<endl;

空指针

指针指向内存中编号0的空间

可以用于初始化指针变量,空指针指向内存无权限访问 (0-255系统占用了)

int *p=NULL;

野指针

指针变量p指向了非法内存空间  

eg: int *p=(int *)0x1100;

const修饰指针

常量指针

const修饰指针        指针指向可以修改,指向的值不可以修改

int a=10,b=10;
const int *p=&a;
//修改指针指向的内存空间
p=&b;    //让指针指向b
//修改指向的值——指针指向的内存空间的值不能修改
*p=200;    //操作错误

指针常量

const后面跟的值是常量        int * const p

指针的指向不可以改,指针指向内存空间的值可以修改

p=&b;    //让指针指向b——错误,指向不可以变
//修改指向的值——指针指向的内存空间的值可以修改
*p=200;    //现在p记录的内存空间的值变成了200

const既修饰指针,又修饰常量

const int * const p = & a

指针指向和指向的值都不可变

指针和数组

利用指针访问数组

int arr[10]={1,2,3,4,5,6,7,8,9,10};
//访问第一个元素
1. arr[0]
//用指针  
2. int * p = arr; //这里arr就是数组首地址 
cout<<"用指针访问第一个元素 "<<*p<<endl;
//第二个
可以直接 p ++  指针向后偏移了四个字节,即:
 p ++ ;
cout<<"用指针访问第一个元素 "<<*p<<endl;
//在 C++ 中,当给一个指针添加一个值的时候,实际上添加的值是把这个值乘以指针引用的数据类型的大小。

指针和函数

值传递和地址传递

写一个交换函数,值传递——实参值不变
void swap(int x,int y){
    int tem=x;
    x=y;
    y=tem;
}

//交换地址——改变了实参的值
void swap2(int *p,int *q){
    int tem2=*p;
    *p=*q;
    *q=tem;
}

int main(){
    int a=10;
    int b=20;
//值传递
    swap(a,b);
//地址传递
    swap2(&a,&b);
}

结构体

用户自定的数据类型

定义和使用

语法: struct 结构体名 {成员列表}

创建学生数据类型,创建具体学生语法
//1. struct 类型名称 {成员列表}
struct student
{
   string name;
   int age;
   double score;
};
//创建具体学生
int main(){
    student stu1;
    stu1.name="bob";
    stu1.age=23;
    stu1.score=99;

struct student s2={"julia",23,100};

}
//定义时顺便创建
struct student
{
   string name;
   int age;
   double score;
}S1,S2,S3;    //这里S1,S2,S3就创建好了
--创建变量时,可以省略struct;

结构体数组

定义结构体
struct stu{
    string name;
    int age;
};
创建结构体数组
struct stu stuarry[10]={{值1},{值2},{值3}};
遍历

结构体指针

操作符 ->

上面结构体
通过指针指向结构体变量
struct stu s1={"bubby",32};
通过指针访问结构体变量中的数据
struct stu *p=&s1
p->name;    //获取姓名 

结构体嵌套

结构体中的成员是另一个结构体,被嵌套的如果在后面,要提前声明

结构体中的const

把函数中的形参改为指针可以减少占用的内存空间,而且不会复制新的副本出来;这个时候用const可以防止误操作

c++中随机数调用

rand()函数:返回一个非负整数,对应的头文件<cstdlib>

调用:randomNum = rand();

但是这样生成的是一个伪随机数(系统用函数生成的)

要提供一个随机数种子——调用srand函数
unsigned seed; // Random generator seed
srand(seed);

调用time函数
unsigned seed;  // Random generator seed
// Use the time function to get a "seed” value for srand
seed = time(0);
srand(seed);

将随机数的范围限制在 最小值 min 和最大值 max 之间的整数
number = (rand()%(maxValue - minValue +1)) + minValue;

number=rand()%10+1    //1~10

const int MIN_VALUE = 10;
const int MAX_VALUE = 18;
number = rand() % (MAX_VALUE - MIN_VALUE + 1) + MIN_VALUE;    //10〜18

网站公告

今日签到

点亮在社区的每一天
去签到