C语言指针

来源:互联网 发布:java语言入门知识 编辑:程序博客网 时间:2024/06/06 10:40

基础知识要点

  • 对变量使用&运算符,可以取得该变量的地址。这个地址称为指向该变量的指针。
  • 指针变量hoge_p保存了指向其他变量的地址的情况下,可以说“hoge_p指向hoge”
  • 对指针变量运用*运算符,就等同于它指向的变量。如果hoge_p指向hoge,*hoge_p就等同于hoge。

指针和地址的微妙关系

  • 8086是分段寻址的,具体来说是指一个物理地址由段地址与偏移量两部分组成,长度各是16位。其中段地址左移4位(即乘以16)与偏移量相加即为物理地址。
  • void *类型为可以指向任何类型的指针类型

指针声明时为什么要声明类型

  • 不同类型的指针在内存中的存储方式不同,取出指针的值时需要使用类型。
  • 指针运算时需要依据数据类型。在C语言中,对指针进行加1运算,地址的值会增加当前指针所指向的数据的长度。

空指针

  • 空指针是指可以确保没有指向任何一个对象的执政。通常使用宏定义NULL来表示空指针常量值。
  • 空指针确保它和任何非空指针进行比较都不会相等,因此经常作为函数发生异常时的返回值使用。
  • 链表经常在数据的末尾放上一个空指针来提示后面已经没有元素。
  • 在现在的操作系统下,应用程序一旦视图通过空指针引用对象,会马上招致一个异常并且当前应用程序会被操作系统强制终止。因此,如果每次使用NULL来初始化指针变量,在错误地使用了无效(未初始化)的指针时,我们就可以发现潜在的bug。
  • 并不是所有的操作系统都能对空指针应用进行错误处理。DOS和UNIX都不行。
  • 只有NULL,无论对方指向什么类型的变量,都可以被赋值和比较。
  • 先将空指针强制转型,然后进行赋值、比较操作的程序,不但是徒劳的,甚至让程序变得难以阅读。
0 0
原创粉丝点击