其他分享
首页 > 其他分享> > 【考研】C语言

【考研】C语言

作者:互联网

考研C语言

收录数据结构会用到的C语言知识,建议有基础的情况下再学习,针对性学习即可。

往后的学习要多从内存角度去学习计算机的知识


1. 数组

1.1 一维数值数组

1.2 一维字符数组:数组名里存的就是字符数组的起始地址char array[4] = {0}; char* p = array; // *p==array[0]


2. 指针

1.1 指针本质:将某个变量的地址保存在内存中(类似俄罗斯套娃)

int* i_pointer = &i;

1.2 指针使用场景

  1. 传递

    • C语言中形参的传递只是值传递,不会改变原值。但如果要实现更改原值,则要用到指针)

      int test(int* a)
      {
      	*a = 15;
      }
      
      int main()
      {
      	int a = 10;
      	printf("%d", a);	// 10
      	test(&a);
          printf("%d", a);	// 15
      	return 0;
      }
      
  2. 偏移

1.3 二级指针

二级指针的初始化一定是一级指针的取地址值


3. 动态内存申请

  1. 前置内容

    • 动态内存申请的空间在堆区域,用完得释放空间
    • 堆区域和栈区域的区别:
      • 栈区域的内容随着函数的结束而释放
      • 堆区域的内容只有在自己用完free或进程结束后释放
  2. 动态内存申请

    int i;	// 申请空间大小的变量
    scanf("%d", &i);
    char *p;	// 用于接收返回的起始地址
    p = (char *)malloc(i);	// 申请你输入的空间大小,并返回一个起始地址,由p指针接收。由于malloc申请空间的单位是字节,并且是无类型的,因此要指定类型
    ....
    free(p);	// 用完后释放动态内存
    
  3. 补充

    • 野指针就是指针指向的位置不可知的。(随机的、不正确的、没有明确限制的)

    • 导致野指针的情况

      • 指针未定义

        #include <stdio.h>
        int main()
        {
        	int* p; //局部变量指针未初始化,默认就是随机值
        	*p=10;
        	return 0;
        }
        
      • 指针越界访问

        #include <stdio.h>
        int main()
        {
        	int arr[10] = {0};
            int* p = arr;
            for(int i=0; i<12; i++)
            {
                *p++=i;
            }
            return 0;
        }
        
      • 指针指向的空间已经释放

        int* test()
        {
            int a = 10;
            return &a;
        }
        
        int main()
        {
            int* p = test();
            printf("%d\n", *p);
            return 0;
        }
        

        img

    • 野指针的规避

      1. 指针初始化(如果没有就初始化为NULL)
      2. 小心指针越界
      3. 指针指向空间释放即设置其为NULL
      4. 指针使用之前检查其有效性(例如:判断是否为NULL)

4. 结构体:管理不同类型的集合

  1. 声明

    struct student {	// 放main函数外
        int a;
        char b;
       	...
    };
    
  2. 初始化

    struct student s = {1000, 'c'};		// 函数内初始化
    
  3. 使用

    s.a , s.b	// 访问每一个成员
    

4.1 结构体数组

  1. 初始化

    struct student array[3];
    
  2. 使用

    array[0].a , array[0].b		// 访问数组[0]中的a,b
    

4.2 结构体指针

  1. 初始化

    struct student *p;
    
  2. 使用

    method 1:
    (*p).a , (*p).b;	// 因为.的优先级比*高
    
    method 2:
    p——>a , p——>b		// 比较常用的写法
    

5. 递归

  1. 确定递归公式
  2. 写好结束条件

标签:初始化,10,int,C语言,数组,array,指针,考研
来源: https://www.cnblogs.com/blog-cjz/p/16514825.html