C++ primer plus






系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档







前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考






第四章

字符串可以直接相加减

 s2 += " for a day"
 s3 = s1 + s2

数组字符串的加减,函数strcpy

#include <string>
#include <cstring>


        using namespace std;

        char charr1[20];
        char charr2[20] = "jaguar";
        string str1;
        string str2 = "panther";

        str1 = str2;
        strcpy(charr1, charr2);

        str1 += " paste";
        strcat(charr1, " juice");

        int len1 = str1.size();
        int len2 = strlen(charr1);

读取函数

如getline(cin,str)

获取一行输入

结构体

数组类型必须相同,结构体中可以不同类型

inflatable就相当于int,double,char等的用法

结构体里面都是分号,表明完整一句话

大花括号结束需要分号;

struct inflatable
{
        char name[20];
        float volume;
        double price;
};

c语言需要用

struct inflatable guest

C++只需要

inflatable guest

成员运算符(.)点来访问

结构体放在main函数里面 那么其他函数就不能用 一般放在外边,这样所有函数都能使用。

结构体变量赋值(注意中间不是一句话所以用逗号隔开)

inflatable guest =
        {
                "Glorious Gloria",
                1.88,
                29.99
        };

结构体可以直接等式进行赋值,但是数组不行

结构体数组

数组中每个元素都是数组(外层花括号表示创建数组,内层花括号用来表示结构体)

#include <iostream>

struct inflatable
{
        char name[20];
        float volume;
        double price;
};

int main(void)
{
        using namespace std;

        inflatable guests[2] =
        {
                {"Bambi", 0.5, 21.99},
                {"Godzilla", 2000, 565.99}
        };

        cout << "The guests " << guests[0].name << " and " << guests[1].name << " have a combined volume of "
             << guests[0].volume + guests[1].volume << " cubic feet." << endl;

        return 0;

共用体(union)联合体

只能取用一种数据类型,所以占用空间取变量最大空间。共用同一个内存空间,且以最大成员内存位准。

枚举类型(enum)

枚举类型的的变量只能使用枚举范围的变量

枚举类型不能相加

可以强制类型转化来赋值给枚举类型。

目的是为了常见符号常量而不是单纯为了创建枚举类型

生僻:最大枚举值为比最大的数值的(2的n次方-1)

指针(里面都是地址)

地址一般是16进制的

*取值&取址

int *a(创建一个指针)*a(取地址a的值)

int*p1,p2;(p1是指针,p2不是指针)   int*p1,*p2;

指针的大小都是一样的,但是指针指向的内容char或者int的大小不一样

警告:在对指针的内容进行确定之前需要确定指针的位置

(int*)强制指针类型转化

New函数(返回首地址)

int占4字节

double占8字节

char占一个字节

难点:&pointer(取出指针的地址,之前说的都是变量的地址,可以想象地址和变量都是实体,实体都会有物理地址,所以指针在内存中也是有地址的)

int *pt = new int;(为指针开辟一个物理空间)

  GNU nano 4.8                                                                           17.cpp                                                                                     #include <iostream>

int main(void)
{
        using namespace std;

        int nights = 1001;
        int *pt = new int;
        *pt = 1001;

        cout << "nights value = " << nights << " : location = " << &nights << endl;
        cout << "int value = " << *pt << " : location = " << pt << endl;

        double *pd = new double;
        *pd = 10000001.0;

        cout << "double value = " << *pd << " : location = " << pd << endl;

        cout << "location of pointer pd = " << &pd << endl;

        cout << "size of pt = " << sizeof(pt) << endl;
        cout << "size of *pt = " << sizeof(*pt) << endl;

        cout << "size of pd = " << sizeof(pd) << endl;
        cout << "size of *pd = " << sizeof(*pd) << endl;

        return 0;
}

结论指针占用的的大小为8字节(因为指针是地址64位就是八个字节)

 delete(C++)或者free(c)来释放内存

delete指针

动态数组

创建double类型的数组,指针p3指向该数组的第一个地址

delete 【】p3

 double *p3 = new double [3];

相当于买房子,创建一个房子卖了就卖了,没创建房子就别释放房子

指针和数组可以通用

所以可以指针加下标的方式来访问,数组名指向数组的第一个元素的地址。

指针可以:p3 = p3 - 1;但是数组不可以是因为数组表示数组第一个的地址是个常量,常量不可以赋值,但是指针可以,是因为指针是变量

#include <iostream>

int main(void)
{
        using namespace std;

        double *p3 = new double [3];
        p3[0] = 0.2;
        p3[1] = 0.5;
        p3[2] = 0.8;

        cout << "p3[1] is " << p3[1] << endl;
        p3 = p3 + 1;
        cout << "Now p3[0] is " << p3[0] << endl;
        cout << "p3[1] is " << p3[1] << endl;

        p3 = p3 - 1;

        delete [] p3;

        return 0;
}

指针指向double,int,跨过相应的长度;

 地址加一表示跨过这个元素指向下一元素的地址,

而sizeof(数组名)此时数组名表示数组大小不是地址,对数组名取地址表示这个数组的地址

 cout << "*stacks = " << *stacks << ", *(stacks + 1) = " << *(stacks + 1) << endl;

 打印的地址是char型的时候,一直会打印到\0(空字符串的时候)

**指向地址的地址 数组名就是第一个元素的地址(这个元素还是地址所以就是地址的地址 )

地址访问成员是->

结构体指针和结构体变量

Pizza *pizza = new Pizza

 CandyBar snack[3] = {{"Mocha Munch", 2.3, 350}, {"Flip Fleming", 3.2, 500}, {"Micheal Bay", 4.3, 400}};

CandyBar *pt = new CandyBar[3]********************pt[0]当成数组使用

数组的形式

第五章

一条语句不用花括号缩进就行

四步走

i = 0

i < 5(其实是强制转换成布尔值)

cout << "C++ knows loop" << endl;

i++

*++pt  2)++*pt   3)(*pt)++  4)*pt++的区别

取值和++优先级相同(从右向左的方向)

cout << "*pt++ = " << *pt++ << endl;

用完指针之后再++然后再取值*(后缀优先级比前缀高)

,逗号运算符是最低的

cats = 17,240;先赋值17。然后逗号是取值右边的。

x +3>y-2关系运算符低

for循环和while的循环(注for循环的两个分号不能省略)

do while多用于验证

cin会跨过空白字符不会捕获他忽略他

cin.get(ch)一个不漏的读取

第一行不会读取空格

第二行会

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值