随笔分类 - C语言基础知识及数据结构
摘要:字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。 当一个指针变量在未取得确定地址前使用是危险的,容易引起错误。一个错误的例子,如下: char *name; scanf("%s",name); printf("%s",name);有的编译器虽然也能通过,但这是错误的,因为是个指针,定义时指向不可用的地址。解决这个问题有两种方法:用数组的方法或给字符针针分配内存空间的方法。 数组的方法:char name[20
阅读全文
摘要:在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:int (*f)(int x);double (*ptr)(double x);在定义函数指针时请注意: 函数指针和它指向的函数的参数个数和类型都应该是—致的; 函数指针的...
阅读全文
摘要:Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义。谨记:声明可以多次,定义只能一次。函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern的。但是引用的时候一样是需要声明的。而全局变量在外部使用声明时(注意只有全局变量才能在外部使用),extern关键词是必须的,如果变量无extern修饰且没有显式的初始化,同样成为变量的定义,因此此时必须加extern,而编译器在此标记存储空间在执行时加载如内存并初始化为0。而局部变量的声明不能有extern的修饰,且局部变量在运行时才在堆栈部分分配内存。全局变量或函数本质上讲没有区别,函数名是指向函数二进制块开
阅读全文
摘要:结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针。结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。1. 自引用结构体1.1 不使用typedef时错误的方式:struct tag_1{ struct tag_1 A; int value;};这种声明是错误的,因为这种声明实际上是一个无限循环,成员A是一个结构体,A的内部还会有成员是结构体,依次下去,无线循环。在分配内存的时候,由于无限嵌套,也无法确定这个结构体的长度,所以这种方式是非法的。正确的方式:(使用指针)struct ...
阅读全文
摘要:#include<stdio.h>#define NUM 6int main(){ void print_msg(char*); print_msg("hello,"); print_msg("world!");}void print_msg(char* m){ int i; for(i=0;i<NUM;i++) { printf("%s",m); fflush(stdout); sleep(1); }}下图反映了程序的执行流程:执行结果:hello,hello,hello,hello,hello,hello,wor
阅读全文
摘要:图1为线性表(ZHAO, QIAN, SUN, LI, ZHOU, WU, ZHENG, WANG)的逻辑状态。头指针指示链表中第一个结点(即第一个数据元素的存储映像)的存储位置。同时,由于最后一个数据元素没有直接后继,则线性链表中最后一个结点的指针为“空”(NULL)。图1 线性链表的逻辑状态 由上述描述可见,单链表可由头指针来唯一确定,在C语言中可用“结构指针”来描述。//-----线性表的单链表存储结构-----typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList; 有时在单链表的第一个结点之前附设一个结...
阅读全文

浙公网安备 33010602011771号