一个变量如果存储一个数据块(通常是具有数据类型信息的变量或内存对象)或代码块(通常是函数名)的地址,称为指针变量。
一个数据块或代码块的地址(通常通过取址运算符&取出或函数返回),称为指针,可以作为右值赋值给指针变量。
通常,也将指针变量简称为指针。所以指针与指针变量的确切含义可以在上下文中去区分。
2.1 数据指针,指向数据的指针。
2.2 函数指针,指向函数的指针。
2.3 泛型指针,类型暂定的void*,void指针可以先获得一个类型暂定的地址,具体解引用或函数调用前需要要做强制类型转换,转换为具体数据类型或函数类型。
所以,指针与类型信息是密切相关的一个内存地址,有了内存地址,知道去哪里取数据或代码,有了类型信息,才能进一步知道要取字节的长度,数据如何解码。或者函数如何匹配与链接。
指针与地址的关系,也要从三种类型的指针变量去区分:
3.1 数据指针:数据指针是一个具有数据类型信息的地址。
3.2 函数指针:函数指针是一个具有函数类型信息的地址。
3.3 泛型指针
3.3.1 泛型指针指向数据块时,其解引用前必须具有明确的数据类型信息(强制类型转换)。
3.3.2 泛型指针指向函数时,其调用前必须具有明确的函数类型信息(强制类型转换)。
#include
#include
void print(int a)
{
printf("%d
",a);
}
int main()
{
int a;
void * vp = &a; // void*指向数据
*(int*)vp= 33; // 数据解引用前做强制类型转换
printf("%d
",a);//33
int (*ap)[4] = (int(*)[4])malloc(sizeof(int)*4*3);//malloc返回void*
ap[2][3] = 33;
void *vfp = print; // void也可以指向函数
(*(void(*)(int))vfp)(ap[2][3]);// 函数调用前前做强制类型转换
getchar();
}
指针体现了内存块之间的联系,我们理解指针,要理解指针的己型、己址、己值,他型、他址、他值。
己型就指指针变量自身的类型,简称为指针类型;
他型是指指针变量的目标类型,也就是指向的类型。
-End-
页面更新:2024-03-16
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号