ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【考研】C语言

2022-07-24 17:00:23  阅读:201  来源: 互联网

标签:初始化 10 int C语言 数组 array 指针 考研


考研C语言

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

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


1. 数组

1.1 一维数值数组

  • 具备相同的数据类型

  • 使用过程需要保留原始数据

  • 访问越界会改变内存中的原有变量的值

  • 数值数组在传递时,元素个数传不过去,只能在函数多定义个变量为Len

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

  • char c[10] = "hello";
  • 字符数组的内存要预留一个字节作为\0结束符
  • scanf读取字符串%s时不用加&
  • 字符数组在传递时,因为字符数组结尾有\0作为结束,因此不用多定义个变量传递长度,除非你不想全部打印
  • gets函数和scanf函数类似,puts函数和prinf函数类似。但gets和puts函数只能读取或输出字符串,并且会自动换行

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有