今天是学习了C语言
总结一下知识:
一、初识C语言程序
#include<stdio.h>
int main()
{
printf("hello, C!");
return 0;
}
在上述程序(简单的)中 :
1. main() 是程序的主函数,主函数是一个程序的入口,在一个工程中有且只有一个主函数。
因此,若要编写一个程序,主函数 很重要。
* 注:* 1. 在一个程序中主函数只能有一个 ;
* 2. 在一个项目中(即使有多个文件)也只能有一个主函数;
2. printf() 是一种库函数,其作用是在屏幕上打印设定的内容;( 注:若要使用一种库函数程序中必须包含其对应的头文件 )
二 、 数据类型(目前仅学到的)
数据类型名称 | 具体类型 | 类型大小 |
char | 字符数据类型 | 1 |
short | 短整型 | 2 |
int | 整型 | 4 |
long | 长整型 | 4 |
long long | 更长的整型 | 8 |
float | 单精度浮点数 | 4 |
double | 双精度浮点数 | 8 |
1. 其中 sizeof() 也是一个库函数,用来计算一个数据类型的大小。
如 :sizeof (int)==4;(意思是 Int 类型的变量大小为4个字节);、
#include<stdio.h>
int main()
{
printf("%d",sizeof(int));
return 0;
}
2. 计算机中的单位
单位 | 单位间转换止 |
bit (比特位) | 1 个 bit位存放 1 个二进制位 |
byte(字节) | = 8 bit |
KB | = 1024 byte |
MB | = 1024 KB |
GB | = 1024 MB |
TB | = 1024 GB |
PB | = 1024 TB |
(注:除以上单位外还有其他单位就不一 一列出了;)
三,变量和常量
1. 定义变量:变量类型 + 变量名字
如下代码(定义一个 int 类型的变量 a ) :
#include<stdio.h>
int main()
{
int a ;
return 0 ;
}
2. 变量分类 (变量分为局部变量和全局变量)
局部变量:定义在大括号内部的变量
全局变脸:定义在大括号外部的变量
#include<stdio.h>
int b; //此处b为全局变量
main()
{
int a; //此处a为局部变量
return 0;
}
当全局变量与局部变量命名冲突时,局部变量优先 。
(注 : 即使编译器不会报错,但是不建议在编程时这样做)
如 :
3、变量的作用域和生命周期
局部变量的作用域 :定义变量的局部范围,如图;
a 变量的作用域是红圈的范围;
全局变量的作用域是整个工程。
(前提是跨文件使用全局变量时要提前声明)
4、变量的生命周期
局部变量的生命周期是其作用域,进入作用域生命周期开始,;
全局变量的生命周期是与程序的生命周期相同
(注 :程序运行时全局变量被创建,程序运行结束时全局变量被销毁,因此,可以称全局变量与程序共存亡)。
就今天就先到这里;See you !
_____________________________________________________________________________ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BACK ! ! !
更新2021年12月12日:
一、常量
1、常量的种类:字面常量,字符常量,字符串常量,标识符常量,枚举常量 等;
①字面常量:例如:“2” 、“3"、”2 . 09“等 ;
②字符常量:' a ' ' b ' 等;
③字符串常量:" sddf " " abc " 等;
(前三类较好理解,后两个比较特殊)
④标识符常量: 标识符量是指在C语言进行预处理时定义的常量
#include <stdio.h>
#define M 100;
main()
{
printf("%d",M);
return 0;
}
如上代码中 , 通过预处理命令 #define 定义了一个标识符常量 M (这个标识符常量M会被编译器识别,并在主函数中应用 #define M 100 就相当于定义了一个常量 M 且 M 的值为100)
⑤枚举常量
这里是C语言中一个特殊类型:enum —— 枚举类型;
#include<stdio.h>
enum sex
{ Male,
Female
}
main()
{
printf("%d",Male);
return 0;
}
如上图,Male与Female是我定义的两个枚举变量;在enum类型中枚举变量Male默认的值为 0 ,Female默认值为 1 。
二、字符串
1、定义字符串:在C语言中定义字符串有两种方式,如下:
#include<stdio.h>
main()
{
char num1[] = {"abc"};
char num2[] = {'a' ,'b','c'};
return 0;
}
这两种定义的方法区别在于用strlen() 函数求其长度时:
首先介绍strlen()函数的作用,strlen() 用来求字符串的长度(每一个字符串的尾部固定有一个字符 ' \0 ' 作为其结束的标志)strlen会读取字符串中 ' \0 ' 前的每一个字符,然后求出其长度 。
① 第一种:
char num1[] = {"abc"} ; ,由于这种定义方式默认尾部有 ' 0 ' ,所以 strlen ()求出其长度是三
② 第二种:
char num2[] = {'a' ,'b','c'} ; strlen () 因为字符串num2没有 ' \0 ' 作为结束的标志,所以求得其长度为随机值。
三、C语言中的注释方式
#include<stdio.h>
main()
{
int a = 2; //定义了一个int类型的变量,并赋值为 2 <--这句话是注释
return 0 ;
}
注释方式有两种:
1、//注释内容(推荐这种注释方式)
2、\*注释内容 * \
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++_______________________________________________________________________________
更新:2021年12月16日
一、scanf()
1、scanf 函数在调用 或 读取时,会返回不同的值;
成功时:返回 1;失败时 :返回 EOF
二、操作符
1、分类:单目操作符,双目操作符,三目操作符
① ++和--
前置++/--:先++/--再使用;
后置++/--:先使用再++/--;
如下图:
②sizeof属于单目操作符
③逻辑操作符 ! 和 &&和 | |
!:在C语言中0表示假;非0表示真(非0可以用 ' !0 ' 来表示)
&&:表示并且;
| | :表示或者;
④条件操作符 :(表达式1)?(表达式2):(表达式3)
如果表达式1成立 则执行表达式2,若表达式 1 不成立 则执行表达式 3;
⑤下表引用操作符:[ ]
引用数组中对应元素事用到 , 如下;
三、逗号表达式
1、基本形式 : (表达式1,表达式2)
2、用法: 当程序 运行到逗号表达式是会从左到右依次执行表达式 1和2,最后整个逗号表达式的值为表达式2的值(即,括号内最右端表达式的值)
如下:
四、C语言中的关键字(简单了解一下)
1、typedef —— 类型重定义
可以在编写程序时将某些 数据类型 的名称 进行改变(使其易于编写)
如下程序中:利用 typedef 将 int 类型重命名为 u i ;
2 、static ----- 静态化
① static 修饰局部变量( 改变局部变量的储存位置 其作用域不改变)
如; 代码 1: ( 在代码1 的 while 循环中 变量b是在while 循环中定义的,其生命周期就是while 每次循环的开始到每次循环的结束,因此在程序运行的过程中变量b被创建了三次,每次的值均为1,且每次循环结束后被销毁,所以打印三个 1 )
代码 2 :
(因为变量b被 static 修饰,将其储存位置 由储存局部变量的栈区 改变为储存静态变量的静态区,使得程序中 while循环 第二次运行时会忽略 " static int b = 0; "这行代码,并以上一次b的值继续运行)
② static 修饰全局变量
代码1:(如图,全局变量 a 在不同的文件中仍可以发挥作用)
(被static 修饰的局部变量仅能在本文件内使用,因此编译器会报错)如图;
③ static 修饰函数
( 函数和全局变量有类似的性质可以跨文件引用 ,而static修饰的函数则只能在本文件即函数定义的文件中使用,不可以跨文件使用,使用上感觉其作用域变小了)
五 、C语言中的 宏定义
1. C语言中用 #define 定义常量和宏。
2. 宏定义常量 :
3.宏定义
这里运用宏的方法类似与一种格式的替换,如下图中 :
通过运用#define 的方式将 int k = ( 7>9 ) ? ( 7 ) : ( 9 ) 转换为一个更为简洁的写法 ,即:
int k = MD (7, 9) ;
六 、指针(简要了解)
1. 在计算机中内存被分为许多小的部分(类似于现实生活中的房间);每个小的部分可以用来存放 各种变量(相当于房间中的人事物);而为了能分辨各个内存单元,就将每个内存单元进行编号(类似于房间上的门牌号);在计算机中这每个编号就是一串十六进制数字;
而这种编号统称为地址 。
2. 指针变量:用来存放一个变量的地址。
如图:变量 a 的地址被储存在指针变量 p 中;因此打印变量 p 是一个地址(一串十六进制数字)。
(注:定义指针变量的格式以上图为例:int* p = &a; 其中“ * ”是 解引用操作符,代表将要定义一个指针变量,“ & ”是取地址操作符代表取一个地址,而 int 代表被指针变量(p)储存的地址(&a)的变量(a)的类型(int) ,“ %p ”是用来打印地址的 。)
3. 指针变量的用处: 通过指针变量所储存的地址进而快捷的找到一个变量。如:
(注:其中 *p 代表通过 p 存放的地址进而找到 p 指向的内容 即 *p == a )
4. 指针的大小:
由于指针变量储存的是地址,因此其大小与地址的大小相同;在32位计算机中指针的大小为 4个字节,在64位计算机中指针的大小为 8 个字节。
七 、结构体类型
1. 定义结构体类型;如图:
定义了一个MC的结构体类型,并定义了一个MC类型的变量 Marry 。
#include<stdio.h>
struct MC
{
char name[10];
int age;
char sex;
}
main()
{
struct MC Marry = {"Marry",10,'x'};
printf("Marry:\nname:%s\nage:%d\nsex:%c",Marry.name,Marry.age,Marrt.sex);
}
注:打印结构体类型变量有两种方法:①:Marry . name
②其中M为结构体变量Marry的指针;
2. 结构体变量的输入(三种形式其中M为Marry 的指针):
scanf("%s %d %c", &(M->name),&(Marry.age),&(Marry.sex));
scanf("%s%d%c", Marry.name,&Marry.age,&Marry.sex);
scanf("%s %d %c", &(M->name),&(M->age),&(M->sex));
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ending。。。