初学c语言总结

本人通过慕课,菜鸟教程等学习途径学习了几个月c语言基础,在此对我认为较为关键的一些地方一波总结。
局部变量与全局变量
简单来说,在函数内定义的变量为局部变量,在函数外部定义的变量为全局变量,局部变量仅在函数内部生存,只能在函数内部被操作,一旦函数调用结束,该储存单元就会被释放,即在两个函数中命名一样的变量,他们是毫无关联的。而全局变量存在与程序运行的整个过程,可以被各个函数所引用。
当我们需要用几个函数处理一个数据时,可以定义将其为全局变量,而局部变量可以理解为在一个函数内部进行数据处理的“工具”,。
全局变量应尽量减少使用,因为全局变量存在与程序运行的整个过程,占用内存空间,而且每个函数都能对其进行操作,在程序运行时难以定位其被修改的位置;局部变量会覆盖全局变量的值,造成混乱。
善于利用函数对程序进行模块化处理,刚接触c语言时因为所写的程序较短,并没有意识到程序模块化设计的重要性,到后来,我们写的程序越来愈大,代码越来越长,如果还在main函数内实现所有功能,有不少功能是重复的,这不仅增加编写的时间,而且增加阅读者的阅读困难。每个功能通过一个函数实现,并在旁注释功能,例如,我在网上找到一个贪吃蛇的程序的片段。

void welcome();               //55开始界面
void Finish();                //291结束界面
void creatgraph();            //69围墙打印
void gotoxy(int x, int y);    //111光标跳转,横为X 0,1,2..
void gotoprint(int x, int y); //121跳转打印
void gotodelete(int x, int y);//127跳转删除
void creatfood();             //133食物产生
int ClickControl();           //157获取键盘信号
int Judge();                  //270游戏结束判断
void MovingBody();      //172蛇的移动 
void Eating();                //223蛇吃到东西后的操作(伸长)
void ChangeBody(int a,int b); //245蛇的坐标变换,后一个复制前一个STRUCT,a,b为head之前坐标


int main()
{
	welcome();
	creatgraph();
	creatfood();
	if (ClickControl() == 0) return 0;
	return 0;
}

善用指针
C语言中的指针可以说是初学者从入门到放弃的转折点,指针的使用很灵活,熟练使用指针能写出好程序,例如调用函数时,可用通过改变指针指向变量的值供主函数使用,动态分配内存等等。但是对其理解不透也容易造成难以发现的错误,因此要善用指针,积累经验.下面就是经典的用函数和指针对值进行交换

int main()
{
  int a,b;
  int*p1,*p2;
p1=&a;
p2=&b;
swap(p1,p2);
}
void swap(int*p1,*p2)
{int t;
t=*p1;
*p1=*p2;
*p2=t;}

如果把int t;改为int *t;就是对t指向一个未知的单元进行赋值,万一其地址储存这有用的数据,就会造成程序崩溃,而且这具有偶然性,可能一开始没问题,但后来总会有产生问题的时候

结构体,指针,链表
在程序需要处理的数据较多的时候,如果不对其进行分类,整个程序看起来就十分混乱,运用结构体对数据归类就很重要了,对于有相互关联的数据,如一个人的身高体重等资料,就可以通过结构体归类,而在需要储存多个人的数据时,还可以通过指针将各个结构体连成链表,使数据成为一个整体。
对于链表,它与数组有点相似,但它相对于数组来说,可以动态分配大小,不用担心数组溢出或数组定义时过大,浪费内存,本人也是刚接触链表,目前只了解最简单的单项链表的结构,但是,我发现通过使我们对数据的处理变得更简单,应为每个表格数据是关联的,只要找到head,就可以对整块数据进行处理。链表较难理解运用,关键还是还熟练掌握指针。
下面我做了张简单的思维导图

发布了3 篇原创文章 · 获赞 5 · 访问量 125

猜你喜欢

转载自blog.csdn.net/Kerrhs/article/details/103412677