This page looks best with JavaScript enabled

C 语言学习笔记 - 指针

 ·  ☕ 2 min read  ·  ✍️ 鱼子盖饭 · 👀... views
  1. 变量的地址:变量在内存中所占存储空间的首地址

  2. int *pa, *pb;

  3. 指针变量的定义只是声明了指针变量的名字及其所能指向的数据类型,并没有说明指针的变量究竟指向了哪里;

  4. 习惯上在定义指针变量的同时将其初始化为 NULL (在 stdio.h 中定义为零值的宏);

  5. 指针变量的值是一个地址,同时自身也有一个地址,存储该地址值;

  6. 指针变量只能指向同一基类型的变量;

  7. int *pa = &a 这个变量声明语句中的 * 只是一个指针类型说明符,不是间接寻址运算符,该语句不能理解为将 &a 的值赋值给 pa 所指向的变量。该语句的含义为:定义一个可以指向整型数据的指针变量 pa,并用整型变量 a 的地址值对指针变量 pa 进行初始化,从而使指针变量 pa 具体地指向了整型变量 a

  8. 按值调用:程序将函数调用语句中的实参的一份副本传给函数的形参;

  9. 模拟按引用调用:指针作函数参数时,虽然实际上也是传值给被调函数(C 语言中的所有函数调用都是按值调用),但是传给被调函数的这个不是变量的值,而是变量的地址

  10. return 仅限于从函数返回一个值,需要从函数返回多个值时,就要用到模拟按引用调用的方法;

  11. 用数组名作函数实参就属于模拟按引用调用,它是将数组在内存中的首地址传给函数的形参,然后在函数中利用形参得到的数组元素地址值,对数组元素进行间接寻址来修改数组元素值的;

  12. 由于指针形参所指向的变量的值在函数调用结束后才能被确定,因此指针形参称为函数的出口参数,形参在函数调用前必须确定其值,因此称为函数的入口参数

  13. 函数指针就是指向函数的指针,指向函数的指针变量中存储的是一个函数在内存中的入口地址,也就是存储这个函数的第一条指令的地址;

  14. 编译器将不带 () 的函数名解释为该函数的入口地址;

  15. int (*compare)(int a, int b) 形参 compare 是一个指针变量,该指针变量可以指向一个两个整型形参、返回值为整型的函数,即 compare 是一个函数指针。()*compare 先结合,表示 compare 是一个指针变量;

  16. int *compare(int a, int b) 声明的是一个两个整型形参并返回整型指针的函数;

  17. if ((*compare)(a[j], a[k]))if (compare(a[j], a[k])) 第一种调用函数的方法显示地说明了 compare 是一个指向函数的指针,对函数的调用是通过对函数指针的解引用来实现的;第二种也可以,但看起来像是真正的函数,容易引导用户去找 compare 函数的;

  18. 指针变量的特殊性表现在:它的内容只能是地址,而不能是数据;必须初始化后才能使用,否则指向不确定的存储单元;只能指向同一基类型的变量;只能参与加(减)整数,自增、自减、关系、赋值等运算。


鱼子盖饭
WRITTEN BY
鱼子盖饭
Get into trouble, make mistakes.


What's on this Page