美文网首页
C语言:指向指针的指针

C语言:指向指针的指针

作者: lissettecarlr | 来源:发表于2019-03-13 19:43 被阅读0次

还是第一次遇到需要使用指针的指针的情况,可能是代码敲得少了吧,于是记录下来

实际的需求是A文件需要用到的B文件中一个静态结构体,而接口已被写好,不能更改了,类似下列代码
B文件,定义了一个结构体temp,接口函数为read

typedef struct{
    int data;
}temp_s;
static temp_s temp={1};

void read(void *p)
{

}

文件A需要使用read函数得到temp的指针

int main()
{
    temp_s  *p;
   //将temp的指针赋值给p
    printf("data = %d\n",p->data);
}

以上是实际中遇到的问题,解答方式如下,下列代码可以直接gcc编译运行

#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>

typedef struct{
    int data;
}temp_s;
static temp_s temp={20};

void read(void *p)
{
    *((uint64_t*)p)=(uint64_t)&temp;
}

int main()
{   
    temp_s* b;
    read(&b);
    printf("data:%d\n",b->data);
    return 0;
}

然后简单分析一下这个代码,首先从函数调用处开始。

read(&b);

&是取址符号,b是一个指向temp结构体的指针,那么&b实际表示的就是b这个指针的地址,也等效与一个指向指针的指针,因为通过它我们能够找到指针p。
这里简单说一下指针,首先指针是需要分配内存的,根据是多少位MCU来定,例如32位单片机则指针大小就是32位,他本身有个内存地址,同时改地址里面又保存了这个指针的指向对象的地址。

接下来是read里面的处理

 *((uint64_t*)p)=(uint64_t)&temp;

((uint64_t)p)表示先将p转化为一个64位指针,因为参数是void,不转化的话是不知道该指针指向了个啥的,然后取*,实际上就是根据这个指针找到所指的对象,由上文可知传入的是一个指向指针的指针,那个他所指的对象就是个指针,也就是b。(uint64_t)&temp;就很好理解,得到temp的指针。我这里在PC上编译所以使用的是64。
我们是不能只接将b传入到read中的,如下

read(b);

总所周知函数参数实际上是传入参数的赋值版本,对其修改是不能修改原值的,其实该问题等效于我想修改变量A,那么在传入参数的时候需要取址&A,这里是想修改指针,也就同理了。

相关文章

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

  • 深入理解C指针

    标签(空格分隔): C语言进阶 本文将会持续更新。。。。 指向指针的指针 在c语言中指针的操作时通过指针变量来实现...

  • C语言:指向指针的指针

    还是第一次遇到需要使用指针的指针的情况,可能是代码敲得少了吧,于是记录下来 实际的需求是A文件需要用到的B文件中一...

  • 计算机基础的考察

    语言语法(以C/C++为例)。 指针(数组),函数指针,操作符运算顺序,const(常指针与指向常量指针),sta...

  • Go语言 指针

    指针 概念 Go语言的指针和C语言一样也是用来保存地址的变量 格式 普通指针 指向数组的指针 注意点 GO语言中只...

  • c++11智能指针父类指针转换为子类指针

    1 C语言指针类型转换 C语言中的指针就是裸指针,裸指针存储是指向计算机内存的某一(起始)地址,通过*取值操作符可...

  • 再学C语言之指针要点

    C之字符数组 C之指针引用字符串 C语言之数组指针 数组指针:首先它是一个指针,它指向数组指针数组:首先它是一个数...

  • 2.7-C语言入门-指针

    1.指针的含义-变量的地址 a.指针:C语言中用“指针”来表示内存地址(即:指针指向了内存地址),即“指针”可理解...

  • 13-Go语言指针和方法

    指针 普通数据类型指针 Go语言中的普通指针和C语言中的普通指针一样, 通过指针也可以间接操作指向的存储空间 Go...

  • C++ 指向类的指针

    原文地址:C++ 指向类的指针 一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成...

网友评论

      本文标题:C语言:指向指针的指针

      本文链接:https://www.haomeiwen.com/subject/fvonpqtx.html