码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 基础 (11)

时间:2019-01-05 00:10:11      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:大括号   str   运算符   size   代码分析   写法   结构体   inf   相加   

1 课堂回顾

作用域与生命周期

 

2 static 局部变量

技术分享图片

技术分享图片

 

 

2 打字游戏

 

3 内存分区代码分析

 

4 结构体基本操作

(复合类型[自定义类型

 

#include <stdio.h>

#include <string.h>

 

// 定义一个结构体类型

// 1struct是关键字

// 2struct Student合起来才是结构体类型

// 3、结构体内部定义的变量不能直接赋值

// 4、结构体只是一个类型,没有定义变量前,是没有分配空间,没有空间,就不能赋值

 

struct Student

{

    int age;

    char name[50];

    int score;

}; // 有分号

 

int main(int argc, char *argv[])

{

    // 定义结构体变量

    // 1、类型名变量名

    struct Student stu; // 别忘了struct关键字

 

    // 1、结构体变量初始化,和数组一样,要使用大括号

    // 2、只有在定义时才能初始化

    struct Student stu2 = {18, "mike", 59};

 

    // 使用结构体成员,不能直接使用,需要借助结构体变量来引用

    struct Student tmp;

 

    // 如果是普通变量,使用. 点运算符

    tmp.age = 18;

    // tmp.name = "mike"; // name成员是数组名,数组名是常量,不能修改

    strcpy(tmp.name, "mike");

    tmp.score = 59;

 

    // 如果是指针变量,使用->

    // 如果是指针,指针有合法指向,才能操作结构体成员

    struct Student *p;

    p = &tmp;

    p->age = 18;

    strcpy(p->name, "mike");

    p->score = 59;

 

    // 任何结构体变量都可用 . ->操作成员

    (&tmp)->age = 18; //操作指针

 

    (*p).age = 18; //操作内存

 

    return 0;

}

 

5 结构体使用画图

 

技术分享图片

 

结构体大小可以简单认为是上面几个相加,但是实际上比他们大,因为有一个结构体对齐的问题

 

*p等价于p[0]

技术分享图片

// .优先级高,所以*p.age 需要写(*p).age

 

06 结构体变量使用补充

技术分享图片

技术分享图片

 

 

07 结构体数组

 

#include <stdio.h>

#include <string.h>

 

struct Student

{

    int age;

    char name[50];

    int score;

};

 

int main()

{

 

    //

 

    struct Student a[5] =

        {

            18, "mike", 59,

            22, "jiang", 66,

            33, "xiaobai", 87,

            29, "lily", 77,

            30, "lucy", 68};

 

    // 求平均分

    int i = 0;

    int n = sizeof(a) / sizeof(a[0]);

    int sum = 0;

 

    for (i = 0; i < n; i++)

    {

        sum += a[i].score;

    }

 

    printf("平均分: %d\n",sum/n);

}

 

int main01(int argc, char *argv[])

{

    struct Student s;

    struct Student a[5]; // 结构体数组

 

    // (a+1) 指针

 

    // 第一种写法:操作元素

    a[0].age = 18;

    strcpy(a[0].name, "mike");

    a[0].score = 50;

 

    // 第二种写法:操作某个元素地址

    (a + 1)->age = 19;

    strcpy((a + 1)->name, "jiang");

    (a + 1)->score = 59;

 

    //第三种写法:操作元素

    (*(a + 2)).age = 18;

    strcpy((*(a + 2)).name, "lily");

    (*(a + 2)).score = 59;

 

    struct Student *p = a;

    p = &a[0];

 

    p[3].age = 21;

    strcpy(p[3].name, "xiaoming");

    p[3].score = 62;

 

    (p + 4)->age = 22;

    strcpy((p + 4)->name, "xiaojiang");

    (p + 4)->score = 88;

 

    int i = 0;

    int n = sizeof(a) / sizeof(a[0]);

    for (i = 0; i < n; i++)

    {

        printf("%d, %s, %d\n", a[i].age, a[i].name, a[i].score);

    }

 

    return 0;

}

 

 

08 结构体嵌套

 

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

 

struct Info

{

    int age;

    char name[50];

};

 

struct Student

{

    struct Info info; //结构体嵌套

    int score;

};

 

int main(int argc, char const *argv[])

{

    struct Student s;

 

    s.info.age = 18;

    strcpy(s.info.name, "mike");

    s.score = 59;

 

    struct Student *p = &s;

    p->info.age = 18;

    strcpy(p->info.name, "mike");

    p->score = 59;

 

    struct Student tmp = {18, "mike", 59};

 

    printf("%d, %s, %d\n", tmp.info.age, tmp.info.name, tmp.score);

 

    return 0;

}

 

9 结构体赋值

技术分享图片

 

10. 思考题

技术分享图片

 

11 结构体值传递和地址传递的区别

 技术分享图片

 

12 指针指向栈区空间

技术分享图片

 

 

13 指针指向堆区空间

技术分享图片

 

技术分享图片

 

 

14 非法使用内存导致的错误说明

 

C++ 基础 (11)

标签:大括号   str   运算符   size   代码分析   写法   结构体   inf   相加   

原文地址:https://www.cnblogs.com/eret9616/p/10223067.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!