• C语言基础3 常见关键字 函数 数组 关键字 指针 结构体(初步认识)


    一、常见关键字

     1)auto 自动的

         每个局部变量都是auto修饰的,基本上都是省略了

     int main(){
    
      auto int a = 10; // 局部变量,进入大括号自动创建,除了大括号自动销毁--自动变量
    
    }

    2)break/continue 用于for循环,while循环,swith

    3)case,default: 用于swith 语句中

    4) char/float/int/short/long

    5) const 常变量, 不能修改的

    6)enum 枚举

    7)extern 是用来申明外部符号的

     全局变量在整个工程中都可以使用;

    8)register 寄存器关键字

         register创建的变量,建议存放在寄存器中

         大量/频繁被使用的数据,想放在寄存器中,提升效率;

         int main(){
    
      register int num=100;//建议num放在寄存器中,只是建议,最终还是由编译器决定
    
    }

    扩展:计算机中的数据可以存储到哪里呢?

     CPU处理的数据需要去内存中拿

    CPU处理速度快,但是内存的速度跟不上,也不行;

    cpu去寄存器中拿数据,没有的话去高速缓存中拿,还没有再去内存中拿

    9) signed 有符号的

    数字是有正负的,signed表示描述的数字是有符号的

    同理unsigned,表示无符号的

    10)static 静态的

     static的3种用法:

     用法一、static修饰局部变量

     static修饰局部变量,改变了局部变量的生命周期(本质上是改变了变量的存储类型)

    void test()
    {
        int a = 1;
        a++;
        printf("%d ", a);
    }
    
    int main()
    {
        int i = 10;
        while (i < 10)
        {
            test();
            i++;
        }
        return 0;
    }

    结果输出10 个2;

    将int a 修改为static 变量,如下:

    void test()
    {
        static int a = 1;
        a++;
        printf("%d ", a);
    }
    
    int main()
    {
        int i = 10;
        while (i < 10)
        {
            test();
            i++;
        }
        return 0;
    }

    结果输出2,3,4,5,6,7,8,9,10,11

    结论:static修改的局部变量,会从栈区存到静态区,除了大括号也不会消毁。程序不结束,全局变量跟static修饰的局部变量不会销毁。

     用法二、static修饰全局变量

    static修饰全局变量,使得这个全局变量只能在自己所在的.c文件内部使用,出了该文件,不能被使用了。

    如下:

     用法三、static修饰函数

    static修饰函数之前:result=30

     增加static ,

    static int add(int x, int y),报错!!

    11)struct 结构体

    12)union 联合体/共用体

    13)void 无,空

    14)typedef 类型重定义(重新起个名字/别名)

    typedef unsigned int u_int; // 给unsigned int 取个别名叫做u_int
    
    int main()
    {
    unsigned int num = 10; //定义一个无符号的int 变量
    u_int num = 20; //用上面定义的别名,定义一个无符号的int 变量,跟直接定义unsigned int num=20是一个意思
    }

    15)volatile

    Note: include 、define不是关键字,叫做预处理指令

    二、函数

    直接scanf输入两个数,计算2个数的和

    #include <stdio.h>
    
    int main() // 计算2个数的和
    {
        int num1 = 0;
        int num2 = 0;
        scanf("%d%d\n", &num1, &num2);
        
        int sum = num1 + num2;
        printf("sum=%d\n", sum);
    }

    函数的方式调用2个数的和

    #include <stdio.h>
    
    int add(int x, int y)
    {
        int z = 0;
        z = x + y;
        return z;
    }
    
    int main() // 计算2个数的和
    {
        int num1 = 1;
        int num2 = 2;
        // int sum = num1 + num2;
    
        int sum = add(num1, num2);// 函数的方式
     
        printf("sum=%d\n", sum);//3
    }

    三、数组

    定义:一组相同类型的元素的集合

    举例:10个整形1-10存起来

    1.数组的创建跟初始化

    int arr[10] = {1,2,3,4,5,6,7,8,9,10};//数组的创建和初始化
    
    char ch[5] = {'a', 'b', 'c'}//不完全初始化,剩余的默认为0

    2.数组的访问--下标(索引)

    #include <stdio.h>
    
    //数组
    int main()
    {
        int arr[3] = {1,2,3};
        char ch[10] = {'a','b','c'};// 不完全初始化,剩余的默认为0
    
        int i = 0;
        while (i < 3)
        {
            printf("%d\n",arr[i]);
            i++;
        }
        return 0;
    }

    四、关键字

    五、指针

    对于32位的计算机,32根物理线->通电->电信号转化成数字信号:1/0, 所以有2的32次方个编号可以给内存编号,0~2**32就是给每个内存单元的编号。

    即:32个bit位的二进制序列组成的地址

    同理:64位机器是64个bit位的二进制序列组成的地址

    1.指针的使用

     

      

    # include <stdio.h>
    
    
    int main()
    {
        int a = 10;
        char ch = "he";
        printf("%p\n", &a);//%p专门用lai打印地址的;
        //取地址a , a 是int,占4个字节,取的是第一个字节的地址;
        //pa=&a, pa是用来存放地址的,在C语言中pa叫做指针变量;* 说明pa是指针变量;int说明pa指向的对象是int类型的
        int* pa = &a;
        char* pc = &ch;
        printf("%p\n", pc);
    
        //pa中存的是a的地址,那么由pa肯定可以找到a的值
        *pa = 20;//*pa就是通过pa地址找到a的值,这个*叫做解引用
        printf("new a is %d\n", a);
    
    
    }

    2.指针的大小

    int main()
    {
        printf("%d\n", sizeof(char*));
        printf("%d\n", sizeof(short*));
        printf("%d\n", sizeof(int*));
        printf("%d\n", sizeof(long*));
        printf("%d\n", sizeof(long long*));
        printf("%d\n", sizeof(float*));
        printf("%d\n", sizeof(double*));
    
        return 0;
    }

     指针的大小是相同的,64位机器的指针的地址都是8byte,

    为什么指针的大小都是一样的呢?

    指针是用来存放地址的,指针需要多大的空间,取决于地址的存储需要多大的空间。 

    32位机器 32bit -->4 byte

    64位机器 64bit --> 8 byte

    六、结构体

    #include <stdio.h>
    
    // Define a struct Student
    struct Student // Student 叫做结构体变量
    {
        char name[10]; //结构体里面的成员,叫做成员变量
        int age;
        double score;
    };
    
    // Define a struct Man
    struct Man
    {
        char name[20];
        int  age;
        float height;
    };
    
    
    
    int main()
    {
        // init a struct: s
        struct Student s={"zhangsan", 18, 97};
        struct Man m = {"xiaoming", 20, 175.5};
        
        // print+ 点 操作符
        printf("name:%s\nage:%d\nsource:%lf\n", s.name,s.age,s.score);
        printf("1:name:%s age:%d height%lf\n", m.name, m.age,m.height);//用到了 点 操作符, 访问成员变量的语法: 结构体变量.成员变量
    
        // print+ 指针 + 点 操作符
        struct Man * pm = &m;
        printf("2:name:%s age:%d height%lf\n", (*pm).name,(*pm).age, (*pm).height);//双精度浮点型用lf
    
        // print+ 指针 +  ->操作符
        //->操作符的语法:结构体指针->成员变量
        printf("3:name:%s age:%d height%lf\n", pm->name, pm->age, pm->height);
    
        {
            /* data */
        };
        
        return 0;
    }
  • 相关阅读:
    Docker 安装Mysql
    Windows Store APP- C# to get IP Address
    使用eclipse构建maven和发布maven的项目
    eclipse中安装maven的插件
    window下安装和部署maven
    oracle12c的(window版本)安装详解
    Linux配置MySQL
    Linux配置Tomcat
    Linux配置JDK环境变量
    maven创建web项目的报错解决方案
  • 原文地址:https://www.cnblogs.com/ananmy/p/16250731.html
Copyright © 2020-2023  润新知