C语言基础

1.函数的声明,略

2.函数为什么要,先声明,后使用呢?Java为什么不这样呢?

因为程序的加载是自上而下的。而java是先加载字节码,后使用的。C语言中,方法是最小的加载单元。

需要注意的是,.h文件不会参加编译,.h的作用就是定义接口规范,和java中的interface一样,不会有对象产生。c中真正编译的是.c或者.cpp文件。

指针函数

指针函数本质上 还是函数,但是函数的返回值类型是一个指针类型。

int *fun(){
    int a = 8;
    reutrn &a;
}
函数指针

函数指针本质上是指针变量。

int (*fun) ();

int sum(){
    return 1;  
}

fun = sum;

//执行;
fun();

C语言内存分配

* 堆
* 栈
* BSS段 : 类似的成员变量的存储区域,因为编译时,无法确定其所需要的存储空间的大小。
* 数据段
* 代码段
>> 前两者由系统分配(运行时);后三者编译器分配(编译时)。

数组和指针

指针访问数据(指针计算)
指针数组
//符号优先级
//() > [] > *
int* p[3]; //[]这是一个数组,数组中元素的类型是int*,数组的标识符为p
数组指针 (行指针)
int a[3][4];

int (*b)[4]; //这是一个指针,指针指向了int[4]的一个数组;
b = a; //可以赋值成功
b = a[0] ; b = &a[0][0];

结构

类似于java中的bean对象。

struct Student{
    char name[50];
    int age;
} student,a;


typedef {
    char name[50];
    int age;
} Student;

//使用结构体
struct Student aa; //不用实例化
aa.age = 50;
内存对齐的问题

对齐的原则:

1.每个字段都是机器字长的整数倍(比如: 32位是4字节;64位是8字节)
2.总的存储空间必须是各个字段的长度的最小公倍数。

对齐的优点是:
1.提高寻址效率,没有割裂每个字段的存储空间。

对齐的缺点是:
1.浪费内存空间

一言以蔽之,就是用空间换时间

联合(共同体)

相同的内存区域,不同时间点存储不同的类型的数据

union Data{
    int i;
    float f;
    char str[20];
} data;

//注意
 union Data{
    int i;
    int j; //为了节约内存空间,i和j是一样的,仅仅是标识符不一样了。
    float f;
    char str[20];
} data;

动态库

h/cpp -> 预编译 -> 编译 -> 汇编 -> 连接成so

gcc test.c -fPIC -shared -o test.so
静态库和动态库的区别
a. 静态库文件比较大; 动态库文件较小
b. 静态库编译时被连接到目标代码,动态库运行时才被加载到目标代码;
c. 静态库类似于android中的module, 一旦打包apk,就需要重新编译。动态库类似于jabar包,在打包apk时,不需要重新编译。

注意: 静态库会被编译so中进行使用。较快,但是文件较大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值