2 qq 32681843 qq_32681843 于 2016.03.30 21:34 提问

关于指针在函数声明的问题

在数据结构中发,什么时候用func(Node *p),什么时候用func(Node **p )和 func(Node *&p)

2个回答

buaawuqiong280111
buaawuqiong280111   2016.03.30 22:04

Node node;
如果想在func中改变node的值,可以用指针
func( &node);
如果想利用Node **p 改变 Node 的值,可以用第二种,说白了和第一种类似,如果想改变Node 类型变量,可以通过指向它的指针来实现,
即Node ** p即可;
如果想改变Node *指针 的值,可以用引用来实现
func(Node *&p)

具体例子如下
typedef struct{

int a;
}Node;

Node *gnp;
Node nodeb;

int main()
{
Node nodea;
nodea.a=9;
func(&nodea);
cout<<nodea.a<<endl;

nodeb.a=9999;
gnp= &nodea;
func( &gnp  );

cout<<(*gnp).a <<endl;

Node nodec;
nodec.a=666;
func( &nodec );
cout<< nodec.a<<endl;
return 1;

}

void func(Node *p)
{
p->a=10;
}

void func(Node ** p)
{
Node * tempp=&nodeb;

p= &tempp;
}

void func(Node *&p)
{
p=&nodeb;
}

qq423399099
qq423399099   Ds   Rxr 2016.03.31 08:54

说白了就是如果想改变指针p所指向的区域的值:那么用func(Node *p)
如果想改变指针p的指向那么用func(Node **p )和 func(Node *&p)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++实验报告
C++实验报告指针的问题关于指针的实验报告
C语言中的声明--函数声明、指针函数、函数指针、typedef
最近在看《程序员面试宝典》对于第6章指针和引用中的部分复杂一些的声明比较头痛,于是忍不住又翻了翻《C Primer Plus》第14章,做一下归纳: 其实无外乎就是指针、数组、函数指针的各种组合。分析一个复杂些的声明和写一个复杂些的声明是一个正向和逆向的推导过程。 分析一个声明,先要分层,先确定这个声明是个函数指针、指针、数组,再一层一层的剥开分析。 而写一个声明,由于有文字描述(面
第七章、函数形参(指针与引用以及传递给函数的数组、vector的操作)
1、函数形参分为非引用形参和引用形参。 非引用形参:将实参的值复制,用复制的值代入函数,进行计算,而不改变实参的值 引用形参:形参名即形参的另一个名,可以对实参直接进行改变和操作。 2、何时用引用形参,何时用非引用形参: 引用形参功能:1、对实参值进行改变。2、可以利用第一个功能实现一个函数返回多个值 非引用形参功能:1、对实参不进行改变,但可以用其值进行运算。2、不能对实参改变,对参数
c++注意事项
1.malloc不能调用构造函数  new可以,new和delete是运算符,而malloc和free是标准库函数,delete可以调用析构函数,而free不可。 2.指针数组和数组指针 int * a[4]:是指a数组里面的元素都是指针 int (*a)[4]:是指,a是个指针,指向长度为4的数组。 3.不能重载的运算符:?:   *   .*   ::  . 。 4.
指针常见错误总结
记录遇到过的关于指针的错误与疑惑。 1.未初始化,就赋值 #include #include int main() { int *p; *p = 1; return 0; } 运行时出现段错误,因为系统没有给指针p分配内存。没有房子,娶了媳妇往哪里放啊。 int *p = (int*)malloc(sizeof(int*));//先买房 *p = 1;//再结婚
关于野指针的一些问题与总结
void Test(void){char *str = (char *) malloc(100);strcpy(str, “hello”);free(str);    if(str != NULL){  strcpy(str, “world”);  printf(str);} 请问运行Test函数会有什么样的结果?答:篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,st...
[C/C++]如何解读返回函数指针的函数声明
int (*(*pf())())() { return nullptr; }   从来没有见过这样的函数声明。那么它究竟是一个怎样的函数呢?我努力回忆起《C专家编程》一书的内容,把其中解读变量声明的方法应用于该函数上,最终读懂了该函数。下面是大致的解读过程。   首先,要确定声明中出现的操作符的优先级。显然,函数调用操作符()的优先级是高于指针解引用操作符*的
你需要知道关于C语言指针的一切
Everything you need to know about pointers in C 你需要知道关于C语言指针的一切 指针的定义 指针是内存地址。 (嗯,简短的段落。) 开始 假设你声明一个名为foo的变量。 int foo; 这个变量占用一些内存。 在当前主流的Intel处理器上,它占用四个字节的内存(因为int是四个字节
C++---从函数返回指针
C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。#include #include #include using namespace std; // 要生成和返回随机数的函数 int * getRandom( ) { static int r[10]; // 设置种子 srand( (unsigned)time( NULL ) );
C语言中的指针
关于指针的课件,有关于指针的实例以及容易出错的问题