计算机基础

理解指针

3.10 综合:理解指针

关键原则:

  • 每个指针都对应一个类型,这个类型表明指针指向哪一类对象。特殊的void*类型代表通用指针。比如,malloc函数返回一个通用指针,然后通过显示强制类型转换或者复制操作那样的隐式强制类型转换,将他转成一个有类型的指针。
  • 每个指针都有一个值。这个值是指定类型对象的地址。特殊的NULL(0)值表示该指针没有任何指向。
  • 指针用&运算符创建。因为leal指令是设计用来计算存储器引用的地址的,&运算符的机器代码实现常常用这条指令来计算表达式的值。
  • 操作符用于指针的间接引用。其结果是一个值,它的类型与该指针的类型相关。间接引用是通过存储器引用来实现的,要么是存储到一个指定的地址,要么是从指定的地址读取。
  • 数组与指针紧密联系。一个数组的名字可以像一个指针变量一样引用(但是不能修改)。
  • 将指针从一种类型强制转换成另一种类型,只改变它的类型,而不改变它的值。
  • 指针也可以指向函数。这提供了一个很强大的存储和向代码传递引用的功能,这些引用可以被程序的某个其他部分调用。例如:
int fun(int x, int *p);
// 声明一个指针fp(fp两边的括号是必须的),将它赋值为这个函数
(int)(*fp)(int, int *);
fp = fun;

//用指针来调用函数
int y = 1;
int result = fp(3, &y);

函数指针的值是该函数机器代码表中第一条指令的地址。

关于作者

程序员,软件工程师,java, golang, rust, c, python,vue, Springboot, mybatis, mysql,elasticsearch, docker, maven, gcc, linux, ubuntu, centos, axum,llm, paddlepaddle, onlyoffice,minio,银河麒麟,中科方德,rpm