C语言指针高级部分:void指针和数据指针

概念

    void指针
    数据指针

void指针

void指针的基本概念

void的意思就是“无类型”,void指针则为“无类型指针”,void指针可以指向任何类型的数据。
所以void指针一般被称为通用指针或者泛指针,或者叫做万能指针

void的意思就是“无类型”,void指针则为“无类型指针”,void指针可以指向任何类型的数据。
所以void指针一般被称为通用指针或者泛指针,或者叫做万能指针

定义形式 :
void *p;

**在C语言中在任何时候都可以用void类型的指针来代替其他类型的指针,void指针可以指向任何数据类型的变量**
**如果要通过void指针去获取它所指向的变量值时候,需要先将void指针强制类型转换成和变量名类型想匹配的数据类型指针后再进行操作;**

指针的强类类型转化:
    void  *p;
    int *pa = (int *)p;
    然后才能对原来的void指针指向的空间进行操作
任何类型的指针都可以赋值给void指针,无需进行强制类型转换;
    float f = 1.22f;
    float *p1 = &f;
    p = p1;//将float指针赋值给p

void指针的应用场合:
当进行纯粹的内存操作的时候,或者传递一个指向未定类型的指针时,可以使用void指针;
void* memcpy(void *addr1,void *addr2,size_t n);
该函数只进行纯粹的内存拷贝,包括NULL字符在内的任何内容都将被拷贝

1:对函数参数的限定
2:对函数返回的限定
3:void指针也常用作函数指针

  

1:对函数参数的限定
2:对函数返回的限定
3:void指针也常用作函数指针

代码如下所示:

#include<stdio.h>

int main(void)
{
    int num1 = 1;
    char char1 = 'b';

    /*定义两个void指针类型*/
    void *void_pointer_1;
    void *void_pointer_2;

    /*给不同的void指针指向不同的数据类型*/
    void_pointer_1 = &num1;
    void_pointer_2 = &char1;

    printf("void_pointer_1:%d,void_pointer_2:%c\n",*((int *)void_pointer_1),*((char *)void_pointer_2));

    void_pointer_2 = &num1;
    printf("void_pointer1:%d\n",*((int *)(void_pointer_2)));

    float float_1 = 1.25f;
    float* float_pointer = &float_1;
    void* void_float_pointer ;
    /**将float类型指针赋值给void类型指针*/
    void_float_pointer = float_pointer;

    printf("float_pointer:%f\n",*((float *)void_float_pointer));

    return 0;
}

数据指针

数据指针的概念:
在嵌入式编程当中,可能在特定的内存但愿读写内容,汇编有对应的MOV命令,而除了C/C++以外的编程语言基本上没有直接访问内存的能力
利用数据指针可直接 通过内存地址操作特定的内存

如:在地址0XFF00FF00对应的内存但愿中写入11
unsigned int *p = (unsigned int *)0XFF00FF00;
*p = 11;

如:在地址0XFF00FF00对应的内存但愿中写入11
unsigned int *p = (unsigned int *)0XFF00FF00;
*p = 11;

数据指针操作特定的内存的时候一定要谨慎,不是所有内存都可以操作,必须要对硬件比较了解后,才能进行操作(可能会出现段错误)

代码能够run,如果有需要的话,可以直接拉下来run一下,看看结构体数组是怎么进行初始化操作和使用的。谢谢大家的访问,如有写的不好的地方,希望大家能够及时的提出来,谢谢观看
 

猜你喜欢

转载自blog.csdn.net/wordwarwordwar/article/details/84932282