C语言指针问题请教
各位大侠,小弟我有一段程序编译出错,错误为:非法间接寻址#include<stdio.h>
void fun(void * addr)
{
void * plink;
plink = addr;
printf("plink = %d , *plink = %d\n" , plink , *plink);
}
void main()
{
int a = 1;
int *pa;
pa = &a;
printf("a = %d , pa = %d\n", a , pa);
fun(pa);
getchar();
}
若将上述fun函数形参void指针改为int型 和 pink改为int型,则不会报错;
各位大侠请问是桌面回事??求解? void型的指针是不能解引用的,即*plink,void即未知类型,无类型,你这样使用,编译器就蒙了。
正确方法是把指针强制类型转换成其他明确的类型之后再解引用,例如:*(int*)plink; lcofjp 发表于 2013-5-23 22:53 static/image/common/back.gif
void型的指针是不能解引用的,即*plink,void即未知类型,无类型,你这样使用,编译器就蒙了。
正确方法是 ...
很感谢您的回答,容我在追问一下:若我将函数fun改为:
void fun(void * addr)
{
void ** plink;
plink = (void **)addr;
printf("plink = %d , *plink = %d\n" , plink , *plink);
}
编译可以通过。那么是不是说,我将plink设为双重指针,但只解引用一次,就不算解引用一个空指针??
(注;问题来源于ucos-ii内存管理章节)
在此先谢过大侠回答!! edgar1989 发表于 2013-5-23 23:22 static/image/common/back.gif
很感谢您的回答,容我在追问一下:若我将函数fun改为:
void fun(void * addr)
{
您好,解引用一次是可以的,类型是明确的,为指针类型。 lcofjp 发表于 2013-5-24 07:11 static/image/common/back.gif
您好,解引用一次是可以的,类型是明确的,为指针类型。
恩,明白了,多谢!
页:
[1]