IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【c语言】初识c语言总结 -> 正文阅读

[C++知识库]【c语言】初识c语言总结

1.数据类型

char // 字符型

short // 短整型

int // 整型

long // 长整型

long long // 更长的整形

float // 单精度浮点型

double // 双精度浮点型

(如何计算各种类型的大小呢?)

#include <stdio.h>
int main()  {
    
    printf("%d",sizeof(char));
    printf("%d",sizeof(short));
    printf("%d",sizeof(int));
    printf("%d",sizeof(long));
    printf("%d",sizeof(long long));
    printf("%d",sizeof(float));
    printf("%d",sizeof(double));
    printf("%d",sizeof(long double));


    return 0;
}

2.变量和常量

生活中有些值是不变的量,即常量,如姓名、性别、身份证号等等;与此同时又有些量是变量,如年龄、成绩、薪资等等。在c语言中同样存在常量和变量之分。

  • 2.1 定义常量的方法

? ? int num=10;

? ? float weight=70.6;

  • 2.2 变量的分类
  • 局部变量
  • 全局变量
#include <stdio.h>

int global = 2021; //globe为全局变量

int main()  {
    int local = 2022; //local为局部变量
    int global = 2022; //这里的global为局部变量
    printf("%d\n",global); //这里打印出来的值是2022

    return 0;
}

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

  • 2.3?变量的使用
#include <stdio.h>
 
int main() {
    
    int a=0, b=0;
    printf("输入两个操作数:");
    scanf("%d %d", &a, &b);
    int sum=a+b;
    printf("a+b=%d",sum);
        
    return 0;
}
  • 2.4?作用域和生命周期

作用域

? ? 作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的。而限定这个名字的可用性的代码范围就是这个名字的作用域。

? ? 1.局部变量的作用域是变量所在的局部范围

? ? 2.全局变量的作用域是整个工程

生命周期

? ? 变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

? ? 1.局部变量的生命周期:进作用域生命周期开始,出作用域生命周期结束

? ? 2.全局变量的生命周期:整个工程的生命周期

  • 2.5 常量

? ? C语言中的常量和变量的定义的形式有所差异。

? ? C语言中的常量分为以下以下几种:

? ? ? ? 字面常量

? ? ? ? const 修饰的常变量

? ? ? ? #define 定义的标识符常量

? ? ? ?枚举常量

#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的
    return0;
}

上面例子上的 pai 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了 变量 pai 不能直接被改变,但是 pai 本质上还是一个变量的,所以叫常变量。


4.字符串+转义字符+注释

  • 4.1 字符串

? ? ? “hello,world.\n”

? ? ??这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。

? ? ? 注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。

#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
    char arr1[] = "bit";
    char arr2[] = {'b', 'i', 't'};
    char arr3[] = {'b', 'i', 't', '\0'};
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    printf("%s\n", arr3);
    return 0;
}
  • 4.2 转义字符

? ? ? 假如我们要在屏幕上打印一个目录: c:\code\test.c

? ? ? 我们该如何写代码?

#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;
}

5.注释

? ??1. 代码中有不需要的代码可以直接删除,也可以注释掉

? ? 2. 代码中有些代码比较难懂,可以加一下注释文字

? ??注释有两种风格:

? ? ? C语言风格的注释 /*xxxxxx*/? ?缺陷:不能嵌套注释

? ? ? C++风格的注释 //xxxxxxxx? ? ?可以注释一行也可以注释多行


6. 选择语句

? ? 如果你好好学习,校招时拿一个好offer,走上人生巅峰。

? ? 如果你不学习,毕业等于失业,回家种地。

? ? 这就是选择!

#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;
}

7.循环语句

? ? 有些事必须一直做,比如老师日复一日的讲课,学生们日复一日的学习。

? ? C语言中如何实现循环呢?

? ? while语句

? ??for语句

? ? do ... while语句

//while循环的实例
#include <stdio.h>
int main()
{
    int days = 180;
    while(days==0)
   {
        days--;
        printf("我要复习努力考研\n");
   }
    if(days==0)
        printf("成功上岸\n");
    return 0;
}

8.函数

#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;
}
//上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y)
{
   int z = x+y;
   return z;
}
int main()
{
    int num1 = 0;
   int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = Add(num1, num2);
    printf("sum = %d\n", sum);
    return 0;
}

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


9.数组

? ? 要存储1-10的数字,怎么存储?

? ? C语言中给了数组的定义:一组相同类型元素的集合

  • 9.1数组定义

? ? ??int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素

  • 9.2数组的下标

? ? ? C语言规定:数组的每个元素都有一个下标,下标是从0开始的。

? ? ? 数组可以通过下标来访问的。 比如:

? ? ? ? int arr[10] = {0}; //如果数组10个元素,下标的范围是0-9

  • 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;
}

10. 操作符

? ? 算数操作符:+? ?-? ?*? ?/? ?%

? ? 移位操作符:>>? ?<<

? ? 位操作符:&? ?^? ?|

? ? 赋值操作符:=? ?+=? ?-=? ?*=? ?/=? ?&=? ?^=? ? |=? ? >>=?? <<=

? ? 单目操作符:! ? ? ? ? ? 逻辑反操作

? ? ? ? ? ? ? ? ? ? ? ? ? - ? ? ? ? ? 负值

? ? ? ? ? ? ? ? ? ? ? ? ? + ? ? ? ? ? 正值

? ? ? ? ? ? ? ? ? ? ? ? ? & ? ? ? ? ? 取地址

? ? ? ? ? ? ? ? ? ? ? ? ? sizeof ? ? ?操作数的类型长度(以字节为单位)

? ? ? ? ? ? ? ? ? ? ? ? ? ~ ? ? ? ? ? 对一个数的二进制按位取反

? ? ? ? ? ? ? ? ? ? ? ? ? -- ? ? ? ? ?前置、后置-1

? ? ? ? ? ? ? ? ? ? ? ? ? ++ ? ? ? ? ?前置、后置+1

? ? ? ? ? ? ? ? ? ? ? ? ? * ? ? ? ? ? 间接访问操作符(解引用操作符)

? ? ? ? ? ? ? ? ? ? ? ? ? (类型) ? ? ? 强制类型转换

? ? 关系操作符:>? >=? <? <=? != ? 用于测试“不相等”

? ? ? ? ? ? ? ? ? ? ? ? ? ==? ? ? ? ? ? ? ? ? ? ? 用于测试“相等”

? ? 逻辑操作符:&& ? ? 逻辑与

? ? ? ? ? ? ? ? ? ? ? ? ? ||? ? ? ? 逻辑或

? ? 条件操作符:exp1 ? exp2 : exp3

? ? 逗号表达式:exp1, exp2, exp3, …expN

? ??下标引用、函数调用和结构成员:[]? ?()? ?.? ?->


11.常见关键字

? ? ?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

(先介绍几个)

  • 11.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;
}
  • 11.2 关键字static

? ? ? 在C语言中:static是用来修饰变量和函数的

? ? ? ? 1. 修饰局部变量-称为静态局部变量

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

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

  • 11.2.1修饰局部变量?
//代码1
#include <stdio.h>
void test()
{
    int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
 int i = 0;
    for(i=0; i<10; i++)
   {
        test();
   }
    return 0;
}
//代码2
#include <stdio.h>
void test()
{
    //static修饰局部变量
    static int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
int i = 0;
    for(i=0; i<10; i++)
   {
        test();
   }
    return 0;
}

? ? 对比代码1和代码2的效果理解static修饰局部变量的意义。

? ? 结论: static修饰局部变量改变了变量的生命周期

? ? ? ? ? ? ? ?让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。

  • 11.2.2 修饰全局变量
//代码1
//add.c
int g_val = 2018;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0;
}
//代码2
//add.c
static int g_val = 2018;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0;
}

? ? 代码1正常,代码2在编译的时候会出现连接性错误。

? ? 结论:一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。

  • 11.2.3 修饰函数
//代码1
//add.c
int Add(int x, int y)
{
    return c+y;
}
//test.c
int main()
{
    printf("%d\n", Add(2, 3));
    return 0;
}
//代码2
//add.c
static int Add(int x, int y)
{
    return c+y;
}
//test.c
int main()
{
    printf("%d\n", Add(2, 3));
    return 0;
}

? ? 代码1正常,代码2在编译的时候会出现连接性错误

? ? 结论:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。


12. #define 定义常量和宏

//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{
    int sum = ADD(2, 3);
    printf("sum = %d\n", sum);
    
    sum = 10*ADD(2, 3);
    printf("sum = %d\n", sum);
    
    return 0;
}

13. 指针

  • 13.1 内存

? ? ??内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址

? ? ? 变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。 取出变量地址如下:

#include <stdio.h>
int main()
{
 int num = 10;
 &num;//取出num的地址
    //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
 printf("%p\n", &num);//打印地址,%p是以地址的形式打印
 return 0;
}

? ? ? ?那地址如何存储,需要定义指针变量。

? ? ? ? ? int num = 10;

? ? ? ? ? int *p;??//p为一个整形指针变量

? ? ? ? ? p = &num;

? ? ? 指针的使用实例:

#include <stdio.h>
int main()
{
 int num = 10;
 int *p = &num;
 *p = 20;
    return 0;
}

? ? ? 以整形指针举例,可以推广到其他类型,如:

#include <stdio.h>
int main()
{
 char ch = 'w';
 char* pc = &ch;
 *pc = 'q';
 printf("%c\n", ch);
    return 0;
}
  • 13.2 指针变量的大小
#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{
    printf("%d\n", sizeof(char *));
    printf("%d\n", sizeof(short *));
    printf("%d\n", sizeof(int *));
    printf("%d\n", sizeof(double *));
    return 0;
}

? ? ? 结论:指针大小在32位平台是4个字节,64位平台是8个字节。


14. 结构体

? ? 结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。

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

? ? 这里只能使用结构体来描述了。

? ? 例如:

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

? ? 结构体的初始化:

//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
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);
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 22:54:07  更:2022-01-29 22:54:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:59:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码