如何保存指针地址 理解指针的指针

有这样一个问题就是如何使用一个整数保存一个结构体或类以及其他类型的指针,这种需求在不同语言之间调用是存在的,例如有一个结构体A:

struct A
{
     char item1;
     int  item2
};

需要使用一个整数b,需要用b保存这个结构体指针的地址(struct A* a = new A),使得b的值就是a的指向的地址,你可能会想直接b = a就可以了,但是编译器都不会答应。因为类型不同,一个是整数一个是指向struct A的指针。

正确的方式如下:

unsigned int b  = 0;
struct A* a = new A;
*(struct A**)&b = a;

这样b的值就是a指向的地址,这样就可以利用b的值找到a指向的内容。

至于这一段怎么理解,我说说个人的理解。

1、&b是取址操作,获取b的地址

2、A**后面的*是指针变量的定义形式,没有前面的*则表示这是一个指向A的指针变量,加上前面的*表示它指向的是一个A的指针型变量的

3、最外的的*是解引用操作,就是改变指向位置的值

简单直白点就是将b的地址指向的位置转化成指向A*的地址,并将该地址存储的值改为要保存的值。

时间: 2024-12-19 07:04:16

如何保存指针地址 理解指针的指针的相关文章

Go语言中地址传递及指针的理解

在学习指针时遇到一个问题,在网上贴出后,得到很多前辈的指导和耐心解答,在此表示感谢,因此整理了此篇文章. 第一次实验,代码如下: type Student struct { Name string } func remove(stu *Student) { fmt.Printf("2----%v\n", stu) stu = nil fmt.Printf("3----%v\n", stu) } func main() { stu := &Student{&q

终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good

这点是与C语言不一样的地方,以前我一直都没有明白这一点,所以总是不明白:函数地址再取地址算怎么回事? ---------------------------------------------------------------------------------------------------------------- 在学习Delphi的时候,一个很好的建议是和C/C++去类比着学习,从指针,到内存管理,到数组,到面向对象……各个方面,都是有很多可以相似和或者也有不同的方,类比着学习,一

【C语言学习】指针再理解(一)

★内存和地址 内存的基本单位是字节,那么内存就可以按字节进行编址,就是给组成内存的所有连续的字节安排地址.其中一个最恰当的比喻就是房子与门牌号,假设有20间连续的房子,从最左边(或者左右边)开始分配门牌号1~20,给内存中字节分配的地址就相当于门牌号,字节就相当于房间.字节的容量只能存储一个字符.那么,内存是如何存储比字符更大的数据呢,比如:整型数据.浮点型数据? ★更大的内存单元 为了存储更大的数据,就会把两个字节或者跟多的字节合在一起组成更大的内存单元.比如内存可以以"字"为单位来

c语言函数指针的理解与使用

转载:http://www.cnblogs.com/haore147/p/3647262.html 1.函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p1,char * p2); C) char * fun3(char * p1,char * p2); 看看上面三个表达式分别是什么意思? C)这很容易,fun3是函数名,p1,p2

1、指针(理解、使用)

1.指针/指针变量的定义 地址 内存单元的编号 从零开始的非负整数 范围:4G[0~4G-1] 指针/指针变量 内存区的每一个字节都有一个编号,这就是“地址” 指针的实质就是内存“地址”,指针就是地址,地址就是指针 指针就是内存单元的编号 指针变量就是存放内存单元编号的变量,或者说指针变量就是存放地址的变量,指针和指针变量是两个不同的概念 也可这样理解: 编号(地址):内存中每一个字节分配一个号码 定义一个变量,存放上面的号码,这样的变量叫做指针变量 但是要注意:通常我们叙述时会把指针变量简称为

快速理解C语言指针

新手在C语言的学习过程中遇到的最头疼的知识点应该就是指针了,指针在C语言中有非常大的用处.下面我就带着问题来写下我对于指针的一些理解. 指针是什么?  指针本身是一个变量,它存储的是数据在内存中的地址而不是数据本身的值.它的定义如下: int a=10,*p; p=&a int a=10; int *p=&a; 首先我们可以理解 int* 这个是要定义一个指针p,然后因为这个指针存储的是地址所以要对a取地址(&)将值赋给指针p,也就是说这个指针p指向a. 很多新手都会对这两种定义方

Delphi指针运用理解

现在是面向对象漫天飞的年代了,大家都在在谈面向对象编程.Java对指针“避而不谈”,C#虽然支持指针运用,但是也淡化处理. 然而,指针还是好完全掌握为妙,省得在开发过程碰钉子,至于对指针的运用在于开发人员的存乎于心,运用得当.指针运用的不好,不要怪开发语言及其机制.下面谈到的是在Delphi中指针的运用,至于其他语言,指针的思想是相通的. 指针是一种数据类型,和编程语言中其它的类型一样,是一种类型的区分,比如 Integer 是带符号的整型,在32位X86机中,是用4个字节表示,而指针也是用4个

【转载】C/C++杂记:深入理解数据成员指针、函数成员指针

原文:C/C++杂记:深入理解数据成员指针.函数成员指针 1. 数据成员指针 对于普通指针变量来说,其值是它所指向的地址,0表示空指针.而对于数据成员指针变量来说,其值是数据成员所在地址相对于对象起始地址的偏移值,空指针用-1表示.例: 代码示例:   2. 函数成员指针 函数成员指针与普通函数指针相比,其size为普通函数指针的两倍(x64下为16字节),分为:ptr和adj两部分. (1) 非虚函数成员指针 ptr部分内容为函数指针(指向一个全局函数,该函数的第一个参数为this指针),ad

C语言关于指针函数与函数指针个人理解

1,函数指针 顾名思义,即指向函数的指针,功能与其他指针相同,该指针变量保存的是所指向函数的地址. 假如是void类型函数指针定义方式可以是 void (*f)(参数列表);亦可以先用 typedef void (*F)(参数列表), F f.但要注意函数指针的类型要与函数类型相同. 下面举个简单的例子 1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef void (*F)(); 4 5 void print_hello() //简