下面是我觉得需要的C语言基础,大家缺什么就可以点下面链接,也可以直接阅读下面的内容。
C程序的组成单位——函数
C语言类型重定义
复杂数据类型和结构体
动态内存管理函数
C语言地址操作与指针基础
这里通过具体的代码来理解需要的C语言基础
typedef int ElemType;
typedef struct LNode
{
ElemType *elem;
int length;
int listsize;
}*List,LNode;
void InitList(List L)
{
L->elem=(List)malloc(sizeof(LNode)*100);
if (!L->elem)
exit(1);
L->length=0;
L->listsize=100;
}
int main()
{
List L_1;
LNode L_2;
return 0;
}
第一部分:类型重定义
typedef int ElemType;
typedef(type define) 即类型重定义
类型重定义不定义新的类型,只是给原有的类型一个新的名字
具体参考下面这篇文章
C语言类型重定义
第二部分:对结构体使用类型重定义
typedef struct LNode //如果有typedef 则这里的LNode可以省略
{
ElemType *elem;
int length;
int listsize;
}*List,LNode;
定义一个结构体,并使用类型重定义typedef给其另一个名字。
这样的好处是见名知意和方便书写。
上述的typedef使用等价于
struct LNode //如果有typedef 则这里的LNode可以省略
{
ElemType *elem;
int length;
int listsize;
};
typedef struct LNode *List;
typedef struct LNode LNode;
参考内容
复杂数据类型和结构体
第三部分:malloc函数
void InitList(List L)
{
L->elem=(List)malloc(sizeof(LNode)*100);
if (!L->elem)
exit(1);
L->length=0;
L->listsize=100;
}
L->elem=(List)malloc(sizeof(LNode)*100);的运行顺序
①计算sizeof(LNode)100),然后传入函数malloc
②开始运行malloc函数,结束后返回void * 类型的指针
③将函数返回的void类型的指针强制转换要使用的类型
④将已转换的类型赋给L->elem
注:
malloc前面的(List)是强制类型转换
如果malloc调用失败则返回NULL即空指针
NULL是宏名,其值为0
具体参考
动态内存管理函数
第四部分:声明结构体变量和其指针
int main()
{
List L_1;
LNode L_2;
return 0;
}
List L_1;
L_1 为指针类型,用于存储结构体的地址,系统只为其分配了存储地址的空间,大小和系统的寻址能力有关。
通常是4个字节或八个字节
LNode L_2;
L_2 为结构体类型,用于存储结构的内容,系统已为其分配了存储内容空间。