首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于对指针的操作的有关问题,会者不难

2012-04-05 
关于对指针的操作的问题,会者不难我想要给一个指针申请一段内存,写了如下这些函数C/C++ codeint* pp0(int*

关于对指针的操作的问题,会者不难
我想要给一个指针申请一段内存,写了如下这些函数

C/C++ code
int* pp0(int* p){    if (p!=NULL)        return p;    p=(int*)malloc(20);    return p;}void pp1(int* p){    if (p!=NULL)        return p;    p=malloc(20);}void pp2(void** p){    if (*p!=NULL)        return ;    *p=malloc(20);    }void test2(){    int* p0=NULL,p1=NULL,p2=NULL;    p0=pp0(p0);//这是我想要的效果,即返回了内存地址,但是需要填写两边p0,我想只填写一遍,即没有前面的“p0=”    pp1(p1);//这样做内存泄露了,p1还是指向NULL    pp2(&p2);//这样做P2里成了存储了一个数字了,也不是我想要的结果}




有办法实现吗?




[解决办法]
事实上就是pp2这种写法了
[解决办法]
不知道为什么你要这样做,

下面的函数可以满足你的要求:
C/C++ code
void pp(void *p){    unsigned int addr;    __asm    {        mov edx,[p]        mov dword ptr[addr],edx    }    void * pVoid =NULL;    pVoid = malloc(20);    __asm    {        mov edx,dword ptr[pVoid]        mov ecx,dword ptr[addr]        mov dword ptr[ecx],edx    }}使用: int *p= NULL;      pp(&p);
[解决办法]
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

[解决办法]
int* p0=NULL,p1=NULL,p2=NULL;
首先你这样的定义不对,可能是你笔误,这时p1,p2是整形,而不是指针
[解决办法]
探讨
C/C++ code

int* pp0(int** p)
{
if (p!=NULL)
return p;
p=(int*)malloc(20);
return p;
}
void pp1(int* p)
{
if (p!=NULL)
return p;
p=malloc(20);
}
void……

热点排行