当前位置:编程学习 > VB >>

这个语句什么意思?关于Void**

--------------------编程问答-------------------- 西西学c了? --------------------编程问答-------------------- 没,是有本书里拿这几句话解释VB代码。 --------------------编程问答--------------------
引用 2 楼 slowgrace 的回复:
没,是有本书里拿这几句话解释VB代码。


对于我来说,有点受不了了.....嘿嘿
这是不是就是专业和业余的差距? --------------------编程问答-------------------- 就这么一点不明白,明白了就没啥不能理解的了。

好些技术书就是那些术语在阻碍理解,就像鞋里的小石头,倒出来扔了,就还是一双好鞋。 --------------------编程问答-------------------- 恩,你说的也对。专业的人不会像我这样猫玩老鼠一样翻过来掉过去玩它。

专业的人会比较关注实用和项目进度啥的,我可几乎没考虑过这些。 --------------------编程问答-------------------- *(void**)pDst = (void*)pSrc
对这类的转换比较迷糊,大概是这样的:

(void*)pSrc是将pSrc转换为void类型的指针。
*(void**)pDst,先是(void**)pDst,然后再对(void**)pDst做取值运算。(void**)pDst也是将pDst转换为void类型的二级指针,在VB里你可以把(void**)pDst考虑成字符串指针。对字符串指针求值就得到了字符串数据的真实地址。
--------------------编程问答-------------------- 6楼我是猜测的,对C中的类型转换一直比较迷糊…… --------------------编程问答-------------------- 在C/C++中 void* 代表任意类型指针, void** 代表指针的指针,也可以理解为指向指针的指针。 

你这段代码的实际意思是为 拷贝或者转换指针地址的意思。

用实际C++ 代码可以还原出这段代码的意思。 

int a = 100;
int b = 200;
int c =0;

void *pv = (void*)&a; // p = a 的指针
void **ppv = &pv;     // ppv = a 的指针地址


c = *(*ppv) ;   // c=100, 
int *p1 = &b;  // p1 = b的指针

*ppv = (void*)p1 ; // 这时 ppv = b的指针的地址 等同 *(void**)ppv = (void*)p1;
c = *(*ppv) ;  // c = 200

--------------------编程问答-------------------- 指针,又见指针! --------------------编程问答--------------------
引用 8 楼 bdzwj 的回复:
在C/C++中 void* 代表任意类型指针, void** 代表指针的指针,也可以理解为指向指针的指针。

 你这段代码的实际意思是为 拷贝或者转换指针地址的意思。

 用实际C++ 代码可以还原出这段代码的意思。

 int a = 100;
 int b = 200;
 int c =0;

 void *pv = (void*)&a; // p = a 的指针
 void **ppv = &pv;     // ppv = a 的指针地址


 c = *(*ppv) ;   // c=100,
 int *p1 = &b;  // p1 = b的指针

 *ppv = (void*)p1 ; // 这时 ppv = b的指针的地址 等同 *(void**)ppv = (void*)p1;
 c = *(*ppv) ;  // c = 200

帮我复习了c++ --------------------编程问答--------------------
引用 9 楼 veron_04 的回复:
指针,又见指针!

--------------------编程问答-------------------- 类型安全转换......,你可以打印结果出来,看看是内存值,还是数值 --------------------编程问答-------------------- 讨厌  Syntax --------------------编程问答-------------------- 我把这个帖子发到C语言那边了,楼下的各位如果还有什么高见,请到这里发言,谢谢。 --------------------编程问答--------------------
引用 14 楼 slowgrace 的回复:
我把这个帖子发到C语言那边了,楼下的各位如果还有什么高见,请到这里发言,谢谢。

不敢去。。。 --------------------编程问答-------------------- **是传说中的“指针的指针”,即该指针变量中所保存的内容是另一个指针。理解的时候,可以先抛开括号中用于表示强制类型转换的内容,单独这样看*pDst = pSrc。

*(void**)pDst = (void*)pSrc

             ||
             ||
             \/       
      
*(类型2)pDst = (类型1)pSrc

             ||
             ||
             \/       
      
*(指向“void类型指针”的指针)pDst = (void类型指针)pSrc

             ||
             ||
             \/       

将“指针pSrc的值”保存到“指针pDst所指向的内存区域”中,因为pDst是指针,而*pDst中保存的内容也是一个指针,因此pDst的类型就是指针的指针,即void**

--------------------编程问答-------------------- 谢谢豆子,明白了。同一内容发了两个帖,有点晕。想起来那个同时和两个世界冠军下象棋的

ANYWAY,你们就不能回一下那边的帖子么?我连续回复3次不能发言了。 --------------------编程问答--------------------
引用 16 楼 supergreenbean 的回复:
将“指针pSrc的值”保存到“指针pDst所指向的内存区域”中


我觉得指针很容易用错,稍不留意就错了。如果是下午瞌睡的时候用,错的概率会很大。那篇的帖子有两个朋友就解释错了。 --------------------编程问答--------------------
引用 8 楼 bdzwj 的回复:


谢谢胡侃的详细解释,用这个思路来理解问题挺好的。不过,有一点我好像和你理解的不一样:

int b=200;

/****你的理解****/
int *p1 = &b; //(void *)b 相当于先用这个语句得到一个整型指针
(void *)p1    //再将这个整型指针转化为void *指针

/****我的理解****/
int *p1 = b; //(void *)b 相当于先用这个语句得到一个整型指针
(void *)p1    //再将这个整型指针转化为void *指针


其实也就是这个帖子10楼的疑问。

如果pSrc是long型变量,那(void*)pSrc是表示下面哪个意思: 

(1)把pSrc的值当做一个指针。该指针的内存地址等于pSrc的值 
(2)还是把pSrc的地址取出来当做一个指针?该指针的内存地址等于pSrc的地址。

我觉得是(1),你觉得是(2)。 --------------------编程问答-------------------- 断贴  --------------------编程问答-------------------- 19楼的代码用错语法高亮了,重贴一下。

int b=200;

/****你的理解****/
int *p1 = &b; //(void *)b 相当于先用这个语句得到一个整型指针
(void *)p1    //再将这个整型指针转化为void *指针

/****我的理解****/
int *p1 = b; //(void *)b 相当于先用这个语句得到一个整型指针
(void *)p1    //再将这个整型指针转化为void *指针
补充:VB ,  非技术类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,