初识C语言

C语言程序框架

C语言的源文件,即后缀名为.c的文件,通常都包括两部分:

  • 头文件声明
  • main函数
#include <stdio.h>

int main()
{
	printf("hello world\n");
	return 0;
}
  • 头文件将代码中需要的系统函数给包含进来
  • main函数是程序的入口,一个工程中有且只有一个main函数

数据类型

C语言数据类型有如下几种:

char       //字符数据类型
short      //短整型
int        //整型
long       //长整型
long long  //超长整型
float      //单精度浮点数类型
double     //双精度浮点数类型

PS:C语言不存在显式的字符串类型,而是通过字符串常量或字符数组的形式来存储字符串

多种数据类型的作用

  • 更有效地利用内存空间
  • 以更丰富灵活的方式描述数据

各个数据类型所占内存空间

char needs 1 byte
short needs 2 byte
int needs 4 byte
long needs 4 byte
long long needs 8 byte
float needs 4 byte
double needs 8 byte
long double needs 8 byte

变量与常量

定义变量的方法

int age = 50;
float weight = 45.5f;  
//这里如果后面不加 f 会警告精度丢失,因为编译器默认将小数视为浮点类型
char ch = 'X';

变量的分类

局部变量

  • 只能在代码块内部使用,即用{}框起的部分

全局变量

  • 可以在整个工程中使用
  • 全局变量和局部变量的名称最好不要相同,如果相同,全局变量会被局部变量覆盖,容易搞混
  • 但是如果要调用其他源文件中定义的全局变量,则需要用extern来声明

对变量进行输入输出

scanf("%d %d", &num1, &num2); //将用户输入的值存入对应变量空间
printf("%d\n", sum);   //将变量的值输出给用户

变量的作用域和生命周期

作用域

  • 局部变量的作用域是变量所在的局部范围,即{}内部
  • 全局变量的作用域是整个工程

生命周期

  • 局部变量:进入作用域生命周期开始,出作用域生命周期结束
  • 全局变量:整个程序的生命周期

常量

几种常量类型

  • 字面常量
3.142010
  • const修饰的常变量
const float pai = 3.1415926f;
pai = 5.42; //对pai进行修改会报错

之所以称为常变量,是因为其存储形式还是和变量一样,只是不能对其进行修改

const int n = 10;
int arr[n] = {0}; //因此这样定义数组会报错,因为n本质上还是变量
  • #define定义的标识符常量
#define MAX 10
int arr[MAX] = {0}; //这样定义数组就没问题
  • 枚举常量
enum Sex
{
	MALE,
	FEMALE,
	SECRET
};

int main()
{
	enum Sex czx = MALE; //枚举常量是一个数据类型,其定义的变量的只能从枚举选项中选择
	return 0;
}

字符串与转义字符

字符串

"hello bit.\n"

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

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

#include <stdio.h>
//试一下下面的代码就能理解上面的内容
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;
}

转义字符

转义字符顾名思义就是转变意思
常见转义字符

常见问题

  • 想要打印一个单引号'
 printf("%c\n", '\'');
  • 想要打印一个单引号"
 printf("%s\n", "\"");

注释

两种风格

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

选择语句

int excellent_level = 60;

if (excellent_level >= 85)
{
	printf("谈恋爱!\n")}
else
{
	printf("变优秀!\n");
}

循环语句

  • while语句
int excellent_level = 0;

while(excellent_level <=90)
{
     line++;
     printf("我要继续努力学习\n");
}
  • for语句
  • do …while语句

函数

编写一个实现加法运算的函数

int Add(int x, int y) // 定义输出值和输入值的数据类型
{
   int z = x+y;  // 定义函数内部局部变量数据类型
   return z;
}

函数封装的好处:

  • 简化代码
  • 便于代码复用

数组

数组的定义:一组相同类型元素的集合

数组元素创建需要指定数组大小,或者根据数组元素个数能够让程序推断出来

数组的定义

int arr[5] = {1,2,3,4,5};

数组的下标

C语言规定:数组的每个元素都有一个下标,下标是从0开始的。数组可以通过下标来访问

操作符

  • 算术操作符
+ - * / %
  • 移位操作符
>> <<
  • 位操作符
& ^ |
  • 赋值操作符
= += -= *= /= &= ^=  |=    >>=   <<=
  • 单目操作符
!           //逻辑反操作
-           //负值
+           //正值
&           //取地址
sizeof      //操作数的类型长度(以字节为单位)
~           //对一个数的二进制按位取反
--          //前置、后置--
++          //前置、后置++
*           //间接访问操作符(解引用操作符)
(类型)       //强制类型转换
  1. sizeof的特殊用法:sizeof a,可以不加括号,这也说明它是操作符不是函数
  2. 计算数组元素个数的方法:sizeof(arr)/sizeof(arr[0])
  3. 后置++:先使用(赋值),再++
  4. 前置++:先++,再使用(赋值)
  5. 强制转换为int(int) 变量
  • 关系操作符
>
>=
<
<=
!=      //用于测试“不相等”
==      //用于测试“相等”
  • 逻辑操作符
&&     //逻辑与
||     //逻辑或
  • 条件操作符
exp1 ? exp2 : exp3

如果exp1为真,exp2的值作为输出;反之exp3作为输出

  • 逗号表达式
exp1, exp2, exp3
  • 下标引用、函数调用和结构成员
[] () . ->

原码、反码与补码

正数

原码、反码和补码统一

负数

原码反码补码
符号位直接按照正负写出原码的符号位不变反码+1
后面的位数写出二进制序列其他位按位取反得到

常见关键字

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

register

建议把某个变量定义为寄存器变量,读取速度更快

typedef

对数据类型进行重命名

typedef unsigned int u_int

static

修饰局部变量

定义静态局部变量,局部变量生命周期变长

修饰全局变量

改变了变量的作用域,让静态全局变量只能在自己所在的源文件内部使用

修饰函数

改变函数的链接属性:外部链接属性–>内部链接属性

#define定义常量和宏

宏-带参数

#define MAX(X, Y) (X>Y?X:Y)

指针

内存

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

指针变量

int num = 10;
int* p = &num;

指针的使用

*p = 20//修改p所指向的内存空间中存放的值

指针的大小

  • 32位平台下地址是32个bit位(即4个字节)
  • 64位平台下地址是64个bit位(即8个字节)

结构体

结构体是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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值