初识C语言

目录

什么是C语言

第一个C语言程序

数据类型变量、常量

字符串+转义字符+注释

选择语句

循环语句

函数

数组

操作符

常见关键字

define 定义常量和宏

指针

  • 结构体

    • 一、什么是C语言

      •         C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    • 二、第一个C语言程序

      •         
        #include<stdio.h>
        int main()
        {
        	printf("Hello world!!!\n");
        	return 0;
        }

        三、数据类型

      • char           //字符数据类型
        short          //短整型
        int              //整形
        long           //长整型
        long long   //更长的整形
        float           //单精度浮点数
        double       //双精度浮点数
      • #include<stdio.h>
        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));
        	printf("%d\n", sizeof(long double));
        	return 0;
        }

      • 三、变量、常量

        1、定义变量

         
        int age = 150;
        float weight = 45.5f;
        char ch = 'w';

         2、变量的分类

      • 局部变量-在大括号内

      • 全局变量-在大括号外

      • 当局部变量和全局变量同名时,局部变量优先使用。

      • 3、变量的使用

      • #include <stdio.h>
        int main()
        {
          int num1 = 0;
         int num2 = 0;
          int sum = 0;
          printf("输入两个操作数:>");
          scanf("%d %d", &num1, &num2);
          sum = num1 + num2;
          printf("sum = %d\n", sum);
          return 0;
        }

        scanf函数不安全易越界访问,且空格读不出来;

      • printf函数为输出函数。

      • 4.变量的作用域和生命周期

      • 作用域:
      • 1. 局部变量的作用域是变量所在的局部范围。
        2. 全局变量的作用域是整个工程。

      • 生命周期:

      • 变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
        1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
        2. 全局变量的生命周期是:整个程序的生命周期。

      • 5.常量

      1. 字面常量

      2. const定义的常变量

      3. #define定义的常量

      4. 枚举常量

      • #include <stdio.h>
        //举例
        enum Sex
        {
        MALE,
        FEMALE,
        SECRET
        };
        //括号中的MALE,FEMALE,SECRET是枚举常量
        int main()
        {
          //字面常量演示
          3.14;//字面常量
          1000;//字面常量
         
          //const 修饰的常变量
          const float pai = 3.14f;  //这里的pai是const修饰的常变量
          pai = 5.14;//是不能直接修改的!
         
          //#define的标识符常量 演示
        #define MAX 100
          printf("max = %d\n", MAX);
         
          //枚举常量演示
          printf("%d\n", MALE);
          printf("%d\n", FEMALE);
          printf("%d\n", SECRET);
          //注:枚举常量的默认是从0开始,依次向下递增1的
          return 0;
        }

        注释:

      • const 定义的为常变量,限制了所定义的变量不能被修改,但本质上还是一个变量。

      • 四、字符串+转义字符+注释

      • 1.字符串
      • 由双引号引起来的一串字符称字符串。
      • 注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
      • 2.转义字符
      • //打印这样一个目录
        #include <stdio.h>
        int main()
        {
        printf("c:\code\test.c\n");
          return 0;
        }

         转义字符:

      • #include <stdio.h>
        int main()
        {
        	//问题1:在屏幕上打印一个单引号',怎么做?
        	//问题2:在屏幕上打印一个字符串,字符串的内容是一个双引号“,怎么做?
        	//可以使用反斜杠
        	printf("%c\n", '\'');
        	printf("%s\n", "\"");
        	return 0;
        }

        笔试题:

      • //程序输出什么?
        #include <stdio.h>
        int main()
        {
          printf("%d\n", strlen("abcdef"));
          // \62 \t被解析成一个转义字符
          printf("%d\n", strlen("c:\test\628\test.c"));//输出14
          return 0;
        }

        5.注释

      • 注释有两种风格:
        C语言风格的注释 /*xxxxxx*/
        缺陷:不能嵌套注释
        C++风格的注释 //xxxxxxxx
        可以注释一行也可以注释多行、

      • 五、选择语句

      • if...else...语句
      • #include <stdio.h>
        int main()
        {
          int coding = 0;
          printf("你会去敲代码吗?(选择1 or 0):>");
          scanf("%d", &coding);
          if(coding == 1)
         {
           prinf("坚持,你会有好offer\n");
         }
          else
         {
           printf("放弃,回家卖红薯\n");
         }
          return 0;
        }

        六、循环语句

      • while语句
        for语句
        do ... while语句

      • 七、函数

      • #include<stdio.h>
        int add(int a, int b)
        {
        	return a + b;
        }
        int main()
        {
        	int a = 0;
        	int b = 0;
        	scanf("%d %d", &a, &b);
        	int sum = add(a, b);
        	printf("%d\n", sum);
        	return 0;
        }

        函数的特点就是简化代码,代码复用。

      • 八、数组

      • 1.数组的定义
      • int a[10]={0,1,2,3,4,5,6,7,8,9};

        2.数组的下标

      • 如果数组有十个元素,那么下标范围0~9

      • 3.数组的使用

      • #include <stdio.h>
        int main()
        {
            int i = 0;
            int arr[10] = {1,2,3,4,5,6,7,8,9,10};
            for(i=0; i<10; i++)
            {
               printf("%d ", arr[i]);
            }
            printf("\n");
            return 0;
        }

        九、操作符

      • 算术操作符
      • +    -    *    /     %
        移位操作符
      •      >>                   <<
      • 左移操作符  右移操作符
      • 位操作符
      • &        ^          |
      • 与    异或      或
      • 赋值操作符
      • =    +=    -=    *=    /=    &=    ^=     |=     >>=    <<=

        单目操作符
      • !            逻辑反操作
      • -            负值
      • +           正值
      • &           取地址
      • sizeof    操作数的类型长度(以字节为单位)
      • ~            对一个数的二进制按位取反
      • --           前置、后置--
      • ++          前置、后置++
      • *            间接访问操作符(解引用操作符)
      • (类型)    强制类型转换
      • 关系操作符
        • >
        • >=
        • <
        • <=
        • !=  用于测试“不相等”
        • ==    用于测试“相等”
        • 逻辑操作符
        • &&    逻辑与
        • ||       逻辑或
        • 条件操作符
        • exp1 ? exp2 : exp3
        • #include<stdio.h>
          int main()
          {
          	int a = 0;
          	scanf("%d", &a);
          	int b = 0;
          	/*if (a == 1)
          	{
          		b = 1;
          	}
          	else
          	{
          		b = -1;
          	}*/
          	((a == 1) ?( b = 1) : (b = -1));
              //if...else...可以用条件操作符来实现
          	printf("%d\n", b);
          }

          逗号表达式

        • exp1, exp2, exp3, …expN
        • #include<stdio.h>
          int main()
          {
          	int a = (2, 3, 5);//逗号表达式最后一个逗号为最终答案
          	printf("%d\n", a);//a=5
          	return 0;
          }

          下标引用、函数调用和结构成员

        •       [ ]     ( )     .       ->
        • 十、关键字

        • auto        break     case      char      const        continue    default       do          double   else    enum
          extern     float       for         goto       if   int        long          register      return     short      signed
          sizeof      static     struct    switch    typedef     union        unsigned    void       volatile    while
    • auto        自动变量
    • extern     声明外部符号
    • void        空
    • 扩展:

    • register   寄存器关键字
    • 计算机中有一种存储器为寄存器,集成到CPU中
    • //int main()
      //{
      //	register int num = 10;
      //	//寄存器变量是不能取地址的,为什么呢?
      //  //内存才能取地址,寄存器集成到CPU上,是没有地址的,不能取地址
      //	//register 起到一个建议的作用,建议讲num的值放在寄存器中,最终是由编译器决定的
      //	return 0;
      //}
      
        • 推荐书籍《深入理解计算机系统》
        • 1.关键字typedef
        • typedef 顾名思义是类型定义,这里应该理解为类型重命名。
        • //将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
          typedef unsigned int uint_32;
          int main()
          {
            //观察num1和num2,这两个变量的类型是一样的
            unsigned int num1 = 0;
            uint_32 num2 = 0;
            return 0;
          }

          2.关键字static

        • static是用来修饰变量和函数的
          1. 修饰局部变量-称为静态局部变量

        • 2. 修饰全局变量-称为静态全局变量

        • 3. 修饰函数-称为静态函数

1.修饰局部变量 

  • #include<stdio.h>
    void test()
    {
    	int i = 1;
    	i++;
    	printf("%d ", i);
    }
    int main()
    {
    	int a = 1;
    	while (a < 10)
    	{
    		test();
    		a++;
    	}
    	return 0;
    }//输出结果为10个2
    
    

    当加入关键字static时

  • #include<stdio.h>
    void test()
    {
    	static int i = 1;
    	i++;
    	printf("%d ", i);
    }
    int main()
    {
    	int a = 1;
    	while (a < 10)
    	{
    		test();
    		a++;
    	}
    	return 0;
    }//输出结果变为2~11

    由此可见,static将局部变量i的生命周期变长了,将i的值保留了下来。

  • 下面是数据在内存中的存储位置

  • 结论:当static修饰局部变量时,它改变了局部变量的存储类型,局部变量原本存储在栈区,而后被static修饰存到了静态区导致局部变量i的生命周期和程序的生命周期一样长。

     2. 修饰全局变量
  •  如图,代码输出结果为10。注释:extern为声明外部符号

  • 当全局变量i加入static时

  •  出现错误。

  • 结论:static当修饰全局变量时,且不在同一个文件下,static将全局变量的外部链接属性改为内部链接属性,则这个全局变量不能被使用,只能在本源文件中使用。

  • 3.修饰函数

  • 道理同上,函数(函数也具有外部链接属性)被static修饰,使得函数只能在本源文件中使用,不能在其他源文件中使用。

  • 十一、#define定义常量和宏

  • #define max 100
    #define ADD(x,y) ((x)+(y))//记得带括号防止优先级的错误
    int main()
    {
    	int a = 10;
    	int b = 10;
    	printf("%d\n", ADD(a, b)); //printf("%d\n", ((a)+(b)));
    	printf("%d\n", max);//printf("%d\n", 100);
    	return 0;
    }

  • 十二、指针

  • 1.内存
  • 每一个内存单元就是一个字节,为了能够更好的访问将他们进行编号,称为地址。
  • 变量时创建在内存中的,每一个内存单元对应一个地址,因此变量也是有地址的。
  • int main()
    {
    	int num = 10;
    	printf("%p\n", &num);
    	//&为取地址符号,每个字节都有地址,取得是第一个字节的地址。%p为以地址的形式打印。
    	return 0;
    }

    2.指针的使用

  •  3.指针的大小

  •  总结:在32位机器指针大小为4,在64位机器为8。

  • 十三、结构体

  • struct Stu
    {
    	char name[20];//名字
    	int age;	  //年龄
    	char sex[5];  //性别
    	char id[15];  //学号
    };
    int main()
    {
    	//打印结构体信息
    	struct Stu s = { "张三", 20, "男", "20220101" };
    	//.为结构成员访问操作符
    	printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
    	//->操作符 (指针使用)
    	struct Stu* ps = &s;
    	printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps -> id);
    	return 0;
    }
  • 以上为初始c语言的全部内容,如有雷同纯属巧合。如有错误请及时通知博主更正,感谢!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值