由void指针对指针的理解

作者在 2012-06-09 09:47:39 发布以下内容
最近看到void*,老是弄不清楚*((INT8S*)p[param->Current_Item].pData)=f_temp;,认为不能这样写,只有写成这样才是正确的写法:
void *p;
int a=10;
p = &a;
但是后来仔细理解一下后,发现(INT8S*)p[param->Current_Item].pData已经有明确的指向地址了,因此可以这样写。因为如果没有初始地址时,系统是随机分配的存储地址,运行时系统读取不到*((INT8S*)p[param->Current_Item].pData),因此报错。然后试着运行了下int *指针,只要指针有初始地址,都可以这样写。测试代码如下:
#include <stdio.h>
void main(void)
{
   void *p;    
   int *c;
   int b;
   int a = 10;
  
   c = &b;
   p = &b;
   *((int*)p) = a;
   *c = a;
   printf("*((int*)p) = %d\r\n",*((int*)p));
   printf("*c = %d\r\n",*c);
}
这样就可以了,只要指针有初始地址,指针赋值则有两种方式:*p = a;与p = &a
默认分类 | 阅读 1324 次
文章评论,共4条
小鱼儿c
2012-06-10 00:20
1
呵呵 或许你还是没有明白指针。指针保存32长度整数<br />
的内存地址。<br />
指针类型告诉编译器怎么处理以这个32内存地址起的内存。<br />
是当int 还是char 还是class 还是struct 处理呢。<br />
<br />
void* 是大海什么类型的指针的值都能接受。<br />
<br />
其实别的指针都可以接 但要强制转换<br />
<br />
char a = '4';<br />
int * p = (int *)&amp;a;
大虫归来(作者)
2012-06-13 00:05
2
<div class="quote"><span class="q"><b>小鱼儿c</b>: 呵呵 或许你还是没有明白指针。指针保存32长度整数<br />
的内存地址。<br />
指针类型告诉编译器怎么处理以这个32内存地址起的内存。<br />
是当int 还是char 还是class 还是stru</span></div><img src="image/face/2.gif" class="face">谢谢!不过我想表述的一点是:要得到指针指向的值,需要先获取指针的地址,否则指针是一个野指针,取值具有不确定性。我这样理解应该是没问题的吧?
小鱼儿c
2012-06-13 13:47
3
貌似感觉不对,不知道是不是你的表述错了。<br />
{要得到指针指向的值,需要先获取指针的地址}<br />
先获取的是指针指向值的地址。<br />
而不是指针的地址。
大虫归来(作者)
2012-06-14 00:20
4
<div class="quote"><span class="q"><b>小鱼儿c</b>: 貌似感觉不对,不知道是不是你的表述错了。<br />
{要得到指针指向的值,需要先获取指针的地址}<br />
先获取的是指针指向值的地址。<br />
而不是指针的地址。</span></div>我表述的问题,是想说获取地址,再取值!当然表述不清就是没有理解好的问题!
游客请输入验证码
文章分类