指向指针的指针

指针是c语言的一大利器,可以用他直接对内存进行操作;最近犯了一个大的错误:试图向函数传递一个指针参数,返回函数内部分配的对象的地址;实验证明这种用法是错误的;正确的用法是:把该指针的地址传递给函数,即使用指针的指针,然后用指针的间接引用符‘*’,直接对该指针的内存进行操作;

总结如下:

1.对基本的数据类型(int,char),可以直接传递指针给函数,用*+地址,直接对该内存进行操作;

2.对指针的类型,如果想对指针赋值,改变该指针的内容,则须用指向指针的指针;对该地址进行操作;分析代码如下:

#include <stdio.h>
#include <stdlib.h>
typedef struct 
{
    int a;
    int b;
}node;
/*
void createnode(node * pn)//pn为临时变量,操作结果只在本函数中有效不能返回, 本例中只对pn进行操作,对调用中的pnode 无效;有去无回
{
    pn = (node *)malloc(sizeof(node));
    pn->a = 100;
    pn->b = 10;
}*/

/*c语言可以直接对内存进行操作,操作的结果必须保存在可用的内存中才有效*/
/*指针的指针,指向一个地址,指针的内容为指针的地址;可以直接对指针的内容进行操作(*pn),把操作结果返回*/
void createnode(node ** pn)
{
    if(*pn == NULL)
        printf("NULL\n");
    (*pn) = (node *)malloc(sizeof(node));
    (*pn)->a = 100;
    (*pn)->b = 10;
}
int main()
{
    node *pnode = NULL;
    createnode(&pnode);
    printf("%d\n", pnode->a);
    return 0;
}

 

posted @ 2013-04-19 18:15  linengier  阅读(217)  评论(0)    收藏  举报