C-对野指针的理解

C做作业时无意写了以下代码


char *p;
gets(p);
//输入 helloworld
printf("%s",p);
gcc 编译正常,后来多多同学贴到 vc 发现有问题。

查资料知,这里涉及到了野指针的问题
char *p;  //野指针,无内存空间,不能存放数据!

成因:
(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存
注意:

NULL是系统定义的常量,没有类型限定的0值。一般用来初始化一个指针变量,以标识指针未指向任何地址,或者说空指针,

(2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针

(3)指针操作超越了变量的作用范围

 

C-栈和链表的区别

        链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在由一个个节点组成,每个节点(node)中储存着数据变量(data)指针变量(node next)又有一个头节点(head)连接下面的节点,而最后一个节点指向空(null)。可以在链表类中定义增加,删除,插入,遍历,修改等方法,故常用来储存数据。


  栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top)另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH)删除则称为退栈(POP)。 栈也称为先进后出表。

MYSQL-主键和索引的区别

主键是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录.;使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并且降低添加、删除和更新行的速度。当然索引也有好处就是查询速度快,它利还是大于弊的所以请慎重使用索引。

继续阅读MYSQL-主键和索引的区别