回 帖 发 新 帖 刷新版面

主题:指针问题 好困惑,各位帮帮忙啊 *&

int main()
{
    int b=4;
    int *pa=(int*)malloc(sizeof(int));
    *&pa=&b;
        //pa=&b;
    printf("%p   ",*&pa);
    printf("%p   ",&pa);
    printf("%p   ",pa);
    printf("%p   ",*pa);
    free(pa);
}
编译时不报错,执行出错,应该是free时出错,去掉free()后,执行不报错,为什么啊?*&有什么特别的意义吗?请各位大虾们指教

回复列表 (共4个回复)

沙发

因为pa指向b,所以你的free(pa)其实就是free(&b)

板凳


[code=c]
int main()
{
    int b=4;
    int *pa=(int*)malloc(sizeof(int));//这里为pa分配了内存空间,可也没用这段内存空间
    *&pa=&b;//这里把pa指向b的内存空间,而刚才pa分配的内存空间扔到一边上了,那段内存也没法释放了,只有程序结束后系统回收
        //pa=&b;
    printf("%p   ",*&pa);
    printf("%p   ",&pa);
    printf("%p   ",pa);
    printf("%p   ",*pa);
    free(pa);//pa指向的b的内存空间,b是系统分配的内存空间,free无权回收
}
[/code]

3 楼

*&先取地址再对地址取值,跟直接使用这个变量从结果上看是一个意思,只不过浪费了一个临时空间来存放这个临时产生的地址的值

4 楼

谢谢楼上各位啊 有所领悟

我来回复

您尚未登录,请登录后再回复。点此登录或注册