注册 登录
编程论坛 数据结构与算法

(具体看附上的代码,谢谢大神)为什么pRootNode指针得不到数据,明明调用函数传输函数参数的是地址,在函数内部开辟了地址,为什么还是传不出来?

fengdawei91 发布于 2017-02-21 11:08, 3134 次点击
为什么pRootNode指针得不到数据,明明调用函数传输函数参数的是地址,在函数内部开辟了地址,为什么还是传不出来?如果把函数void TestFunction(Node *pNode)修改成void TestFunction(Node *&pNode)就没问题了,关键是搞不通,问什么传入的是地址还是不能修改呢?求大神指点

#include "stdafx.h"
#include <stdlib.H>

typedef struct Node
{
    int pData;
    Node *pNext;
    Node *pPrevious;
    Node *pParent;
}Node;

void TestFunction(Node *pNode);

int main(int argc, char* argv[])
{
    Node *pRootNode=NULL;
    TestFunction(pRootNode);

    return 0;
}

void TestFunction(Node *pNode)
{
    pNode=(Node*)malloc(sizeof(Node));
    pNode->pData=1;
    pNode->pParent=NULL;
    pNode->pNext=NULL;
    pNode->pPrevious=NULL;
}
8 回复
#2
fengdawei912017-02-21 15:29
明白了,自己总结一下,如果不对请大侠给指正。
首先,这是指针传递的例子。定义一个指针变量a,char *a="nihao";其中a存储的就是"nihao"的地址,*a="nihao"。但同时指针变量a又有自己的地址,可以采用&a得到a的地址。
pNode和pRootNode都是一个指针变量,存放的是其它变量的地址,但是pNode和pRootNode本身为变量,自己也有自己的地址。假如pRootNode="Test";则子函数中的pNode指向的是"Test",pNode和pRootNode是不同的指针(pNode和pRootNode是不同的地址),但他们存储的都是"Test"这个变量的地址,都指向"Test"这个变量,也就是说pNode=*pRootNode,pNode=pRootNode,但是&pNode!=&pRootNode,所以对pNode指针进行修改并不会影响pRootNode,只不过是pNode指针指向了别处。
#3
azzbcc2017-02-21 17:44
厉害,当初想明白这个可是花了我不少时间。

提一点小瑕疵

char *a="nihao"
*a = 'n';

带星号指针 值为 指针指向的数据类型,打印sizeof(*a)就知道了。
#4
xzlxzlxzl2017-02-21 19:08
嗯,要修改指针指向,则必须传指针的指针!
void TestFunction(Node **pNode);

TestFunction(&pRootNode);

void TestFunction(Node **pNode)
{
    *pNode=(Node*)malloc(sizeof(Node));
    (*pNode)->pData=1;
....下同
#5
fengdawei912017-02-21 21:57
回复 3楼 azzbcc
恩恩,谢谢大神补充,嘿嘿
#6
fengdawei912017-02-21 21:59
回复 4楼 xzlxzlxzl
恩恩,大神,指针的指针就是指针变量的地址吧?我感觉是这样的,双指针不太会用,我用的是引用,大神,这两个道理都差不多吧应该?
#7
书生牛犊2017-02-25 22:58
回复 6楼 fengdawei91
指针的指针 是 一个保存了另一个保存了实际变量地址信息的指针的地址信息的指针
指针的引用 是 一个等价于另一个保存了实际变量地址信息的指针的变量别名   

char* a="Hell0";//a保存“Hello”的地址
char** b=&a;//b保存a的地址,是指针的指针,二级指针   
char*& c=a;//c是a的别名(对a的引用)
#8
fengdawei912017-02-27 17:00
回复 7楼 书生牛犊
谢谢大侠,学习啦,哈哈
#9
droyoo2017-04-17 00:11
让我想起第一次接触这个知识点的时候,哦,这个跟函数的嵌套有点异曲同工的意思
1