C基础(1)

程序运行过程如下:

预处理, 展开头文件/宏替换/去掉注释/条件编译 (test.i main .i)

编译,    检查语法,生成汇编                                  ( test.s  main .s)

汇编,  汇编代码转换机器码                                       (test.o main.o)

链接    链接到一起生成可执行程序                               a.out

1、由.c文件到.i文件,这个过程叫预处理。

2、由.i文件到.s文件,这个过程叫编译。

3、由.s文件到.o文件,这个过程叫汇编。

4、由.o文件到可执行文件,这个过程叫链接。

1. 限定符

extern 声明一个变量表明该变量已经被别处定义,在此处引用,不开辟空间。

static 静态修饰,static修饰的变量无法被外链调用,即不可被extern 声明,作用域只在本文件。

const 修饰的变量不能修改。

volatile 防止编译器优化。

2. 数组

一维数组数组名:

int a[5];

数组名a代表数组,也是数组第一个元素的地址,所以说数组名是一个常量(不可赋值)。

&a 整个数组的地址。

&a、a、&a[0]在数值上是相等的。

&a+1 跨度是5个元素,a+1跨度是一个元素。

二维数组数组名:

int a[2][3];

a代表整个数组,也代表数组第一行元素的地址。a+1跨度是3个元素

&a代表整个数组的地址 &a+1跨度是6个元素

a[0]代表第0行一维数组的数组名。

3. strlen和sizeof的区别

strlen可以测量字符串的有效字符个数,sizeof得到的结果是占有的内存大小。

4.防止头文件重复包含

#ifndef

#define

#endif

5.指针

野指针:指向非法空间的指针,比如没有初始化的指针,或者指针指向被释放的内存。

万能指针 void* 可以保存任意的地址。

数组指针 int (*p)[4],也称为行指针。

指针数组 int **k,或者 int *num[3];

指针作为函数形参,可以改变实参的值。

数组作为函数的形参,会退化为指针。

指针作为函数返回值不能返回普通局部变量的地址,因为局部变量在函数结束之后会被释放。

字符数组和字符指针和字符常量的区别:

char a[] = "hello"; //存放在栈区

char *p = a;

p = "hello"; //字符串常量存在文字常量区不可改变

字符串处理函数(库函数了解)

6.内存管理

内存分为五个区域:

代码区、堆区、栈区、静态全局区,文字常量区。

malloc和free成对使用。

内存泄漏:内存申请没有释放,导致内存泄露。

操作内存的一些函数:。。。。。

7.复合类型

结构体共用体

结构体的内存对齐。

8.标准文件

一些文件操作的函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 2.变量和基本类型 3.字符串、向量和数组 4.表达式 5.语句 2.变量和基本类型 c++的算术类型: 一个ch...
    暮落晴空阅读 4,026评论 0 0
  • C: 基本数据类型: char(1)、short(2)、int(4)、float(4)、long(8)、doubl...
    想起个帅气的头像阅读 1,630评论 0 0
  • 参考资料:b站Av19301027 数组名字作为参数数组作为函数参数,退化为一个指针void fun(int a[...
    抬头挺胸才算活着阅读 1,823评论 0 1
  • 1、结构体 结构体是C编程中一种用户自定义的数据类型,类似于Java的JavaBean 当结构体需要内存过大,使用...
    Innocencellh阅读 3,499评论 0 0
  • 起源与概括 1973年,为了Unix系统,贝尔实验室发明。标准化两个:C89(也就是ISO C90)和C99。C语...
    LyTsai阅读 2,622评论 0 0

友情链接更多精彩内容