C语言简述

C语言简述

一 、C简单入门

1.1、C语言特点
  1. 使用方便,功能强大(面向过程)
    C 语言书写形式自由、结构严整
    C 语言含有丰富的操作、数据类型及关键字(32 个,const, static, int)
    C 语言允许用户自定义数据类型(struct , union, …)

  2. 便于结构化编程
    C 语言引入函数作为程序的基本模块,从面使得结构化设计及层次化设计变得十分简单
    C 语言有多种简单但相当灵活的控制语句

  3. C 语言是中级语言
    C 语言的位运算功能使得 C 程序可以直接访问物理内存,对硬件实现操作,从而实现了
    汇编语言大部分功能。同时,它还具有高级语言程序可读性强、便于结构化设计的功能

  4. 执行效率高
    C语言贴近低级语言,所生成的代码质量高;同时,还能对底层进行位操作,大大提高运行效率。

  5. 可移植性好

1.2、第一个C程序
//1. 是否有库函数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
//2. 自定义函数入口
int main(void)
{
	printf(“hello, world!\n”);
	return 0;
}

◇开头一般都有一些以#include 开头的预处理语句,它的作用是用来包含一些外部文
件。
◇均有一个 main 函数,它是程序的执行入口
◇程序的执行主体都放在 main 函数的函数体中
◇变量必须在定义后才能使用
◇可以使用一系列的操作符对变量进行操作
◇可以调用别的函数来实现一些功能
◇需要使用 return 来返回 0
◇程序执行过程是从 main 函数开始,到它的 return 语句结束
◇要有适当的注释语句,以辅助说明语句功能
◇在不同程序段要适当地加空行,使程序结构更清晰
◇程序语句要有良好的缩进风格,以提高代码可读性

1.3、C语言编译

环境:
◇ ubuntu 下安装及使用 vim
◇ ubuntu 下安装及使用 gcc

编译过程

  1. 预处理阶段
    #gcc test.c -E -o test.i
    作用:
    ◇ 将#include 的内容解释出来
    ◇ 处理条件预处理命令,比如#if #ifdef #elif #else #endif 等
    ◇ 删除所有的注释 /* … */ //
    ◇ 展开宏定义

  2. 编译阶段
    #gcc test.i -S -o test.S
    作用:
    ◇检查语法错误
    ◇翻译成汇编语言

  3. 汇编阶段
    #gcc test.S -c -o test.o
    作用:
    ◇将汇编语言生成机器指令

  4. 链接阶段
    #gcc test.o -o test.elf
    作用:
    ◇将机器码链接成段
    ◇添加各种地址信息到headinfo段中

1.4、代码执行

ubuntu终端
#./test
本质:
1、加载处理
2、跳到真正的代码入口执行

二 、C语言基础

2.1、常量与变量
  1. 常量
    常量是指在程序运行过程中不可改变的量,C语言中的数值都可以用常量来表示。常量可以表示各种数据类型的值。
    实例:

    1. 456
    2. -129LL
    3. 056
    4. ‘\037’
    5. 3e2
    6. 83.23
    7. ‘e’
      分析:
    8. 456 的值为整数 456
    9. -129LL 的值为负整数-129,类型为 long long int 型
    10. 056 表示一个八进制整数,类型为 int 型
    11. ‘\037’表示一个 ASCII 码字符,类型为 char 型
    12. 3e2 的 3 的 2 次方,类型为 double 型
    13. 83.23 的值为浮点数 83.23,类型为 double 型
    14. ‘e’表示一个字符’e’,类型为 char 型
  2. 变量
    变量,是指可以改变的量,三部分组成:
    数据类型 变量名 = 变量值
    如:

int a = 88; a = 99;
char c = 12;
long long int k= 1110;

变量类型是内存描述符, 用于反映内存块的属性, 变量名一个标识符,变量值是一个数据值。
程序为每个变量分配一个存储空间,其数据存储在这个空间内。程序通过变量名来访问这个空间,也可以通过变量值来修改这个空间存储的内容。
示例:变量的访问与修改

#include <stdio.h>
int main(void)
{
int data = 24; /* 定义变量 data */
printf(“data = %d\n”, data + 1); /* 访问变量 data */
data = 26;
printf(“data = %d\n”, data); /* 修改变量 data */
return 0; /* 再次访问变量 data */
}
  1. 如果定义了全局变量或者静态变量,但是并没有初始化,则在编译时链接到 bss 段,但并没有分配空间
  2. 如果定义了全局变量或者静态变量,而且初始化,则在编译时链接到 data 段,占用空间
  3. 如果是局部变量,则是在代码运行期间动态分配内存空间。

使用 extern 声明变量
一般情况下,变量需要先定义后才能使用,否则会报错。若一定要在变量定义之前使用变量,则需要使用 extern 关键字声明变量。

2.2、基本数据类型

数据类型:数据在内存中存在方式/操作方式
int data = 1;
定义数据类型:
1)告知编译器,内存操作的具体封装形式
2)主要是用于告诉处理器,要操作的内存空间的操作属性
.读写大小(以类型确定的大小为最小操作单位)
.起始地址
如:char a = 100;
int *p = 0xe0200280

2.2.1、类型分布

有符号整形
char(1)
short(2)
int(2/4)
long(4) 64 位系统 8 个字节
long long(8)

无符号整形
unsigned(char short int long)

浮点型
float(4)
double(8)

布尔型
bool(1)

存储中的几种码制:原码、反码、补码

  1. 正数的原码=反码=补码
  2. 对于负数
    原码 = 100xxxxx
    反码 = 原码除了符号位外,其他位取反
    补码 = 反码 + 1 (最高符号位也是不变的)

说明:
◇ 浮点型是非常占用空间的,所以在具体的开发过程中,能不用小数就不要用小数
◇ 能用单精度时不要用双精度(以省内存,加快运算速度)。
◇ 如果想让代码具有更好的移植性, 建议用 double 来定义浮点数
◇ unsigned char xx 用于定义整型数据
◇ char xx 用于定义字符或者字符串空间
◇void 的字面意思是“无类型”,void*类型是“无类型指针”,void *可以指向任何类型的数据。如果函数没有返回值,应声明为void 类型。如果函数无参数,应声明其参数为void 类型

2.2.2、类型转换

C 语言的类型转换,可以分为两种

  1. 自动类型转换(隐式类型转换,有编译器完成)
    主要应用在以下几种情景:
    ◇ 赋值运算,自动把“=”右边的表达式的类型转换成“=”右边的变量的类型
    示例: int a=4.5; a 的值实际是 4!
  2. 强制类型转换(手动完成)。
    安全数据类型转换 低数据类型可以转化为高类型 :char ->short->int->long
    char ch = 100;
    short sh = 10;
    sh = ch; //sh = (short)ch; (short)强制类型转化
    不安全数据类型转换
    char ch = 100;
    int i = 250;
    ch = i; //ch = (char)i; (char)强制类型转化
    结果 ch != 250; 原因超出它的存储范围
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值