c语言中的宏、指针以及结构体的简述

目录

一.define定义常量和宏

二.指针

三.结构体(很重要)


一.define定义常量和宏

定义:宏在c语言中相当于“文本替换”。

#include <stdlib.h>
#include <stdio.h>

//宏在 c 语言里面相当于“文本替换”
#define MAX 100
#define ADD(x,y) x+y  //在这里不能加分号

int main(){
     int sum=10+20;
    int sun=ADD(10,20);
    printf("%d\n",sum);    
    system("pause");
    return 0;
}

二.指针

在介绍指针之前,先来介绍一下在计算机中及其重要的“冯诺依曼体系结构”。

其简略图如下图所示

可以把内存看做是一个楼层,每一个楼层都有若干个房间,比如101室可以住若干个同学;

房间编号 101 相当于计算机内存中的地址,房间内住的人 类比于内存中的数据;

一个房间的大小是1个字节(8个二进制位)。

随机访问:(闪现)以极低的成本访问内存任何一个地址上的数据

指针:保存的数据的含义,就是内存的一个地址(宿舍房间号)

指针完全可以当作一个普通的整数,只不过,这个整数具有一个特定的含义,表示内存上的地址。

#include <stdlib.h>
#include <stdio.h>

int main(){
    int a=100;  //有了一个房间,房间号还不知道,房间里面的人是100
    // p这个变量的类型是一个指针. p里面存的内容就是房间号
    //int 类型的指针表示这个房间号里面住的人是一个int类型的变量
    int* p=&a;  
    printf("%d\n",p);
    system("pause");
    return 0;
}

另外要说的是,一个十六进制的数字可以表示4个二进制位

下面我们来看看int*占用几个字节(可以看作是房间号,如何去保存)

#include <stdlib.h>
#include <stdio.h>

int main(){
    //在32位系统下,一个指针的大小占4个字节
    //在64位系统下,一个指针的大小占8个字节
    //但是在不同的编译器下也会产生不一样的结果,在vs运行
    //环境下虽说是64位操作系统,但是也有可能出现输出为4个字节的情况
    printf("%d\n",sizeof(int*));
    printf("%d\n",sizeof(char*));
    printf("%d\n",sizeof(double*));
    printf("%d\n",p);
    system("pause");
    return 0;
}

三.结构体(很重要)

比如描述学生,学生包含:名字+年龄+性别+学号这几项信息

其代码描述如下:

struct Stu{
    char name[20];//名字
    int age;//年龄
    char sex[5];//性别
    char id[15];//学号
}

具体代码实现有:

#include <stdlib.h>
#include <stdio.h>

enum Sex{
    //枚举
    FEMALE,
    MALE,
    UNKNOWN
};
//本质上结构体就是自定制类型,自定制类型的含义要根据具体的
//应用场景来决定.自定制结构体里面的内容也是由内置类型/其他自定制类型构成的
struct Student{
    //写出结构体中包含的成员
    char name[1024];  //1024 Byte ->1 KB
    int age;
    char id[1024];
    enum Sex sex;
};
//上边的结构体等价于
tepedef struct Student Stdent;
//也可以将上边两个代码进行合并,达到简化的效果
//typedef struct Student{
    //写出结构体中包含的成员
//    char name[1024];  //1024 Byte ->1 KB
//    int age;
//    char id[1024];
//    enum Sex sex;
//}Student;//这里的名字可以改变,但是在后边使用时必须与这里的名字一致 如要改为Stu

int main(){
    Student zhangsan={"张三",18,"1234",MALE};//Stu
    struct Student lisi={"李四",18,"1235",FEMALE};
    
    printf("%s,%s\n",zhangsan.name,lisi.name);
    
    system("pause");
    return 0;
}

最后,在这里祝大家中秋节快乐!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章