C|指针分类(数据指针、函数指针、泛型指针)及类型信息

1 指针与指针变量

一个变量如果存储一个数据块(通常是具有数据类型信息的变量或内存对象)或代码块(通常是函数名)的地址,称为指针变量。

一个数据块或代码块的地址(通常通过取址运算符&取出或函数返回),称为指针,可以作为右值赋值给指针变量。

通常,也将指针变量简称为指针。所以指针与指针变量的确切含义可以在上下文中去区分。

2 指针变量分类

2.1 数据指针,指向数据的指针。

2.2 函数指针,指向函数的指针。

2.3 泛型指针,类型暂定的void*,void指针可以先获得一个类型暂定的地址,具体解引用或函数调用前需要要做强制类型转换,转换为具体数据类型或函数类型。

所以,指针与类型信息是密切相关的一个内存地址,有了内存地址,知道去哪里取数据或代码,有了类型信息,才能进一步知道要取字节的长度,数据如何解码。或者函数如何匹配与链接。

3 地址与指针

指针与地址的关系,也要从三种类型的指针变量去区分:

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();
}

4 指针类型与指针目标类型

指针体现了内存块之间的联系,我们理解指针,要理解指针的己型、己址、己值,他型、他址、他值。

己型就指指针变量自身的类型,简称为指针类型;

他型是指指针变量的目标类型,也就是指向的类型。

C 指针分类(数据指针、函数指针、泛型指针)及类型信息

-End-

展开阅读全文

页面更新:2024-03-16

标签:指针   函数   类型   数据   信息   变量   数据类型   内存   代码   地址

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top