0
点赞
收藏
分享

微信扫一扫

我遇到的 多级指针问题

若如初梘 2022-04-30 阅读 45

我遇到的问题:

我需要 头指针 来传递给 print函数 ,但我不知把头指针定义在主函数,还是自定义函数里,

因此我想用多级指针,

print函数里,设置形参 sd ** aint n

void print(sd** head ,int n)//n为结点
{

}

 然后调用这个函数时,print(head,5)

我误认为head是一个指向sd类型的变量,因此需要多级指针来接受 head这个实参

后来意识到:

int a;
int *p=&a;

这时,假如把实参&p,传递给一个函数,这时
接受它的实参应该为int**类型

但当我传递p给一个函数,p=&a

实际上是把 a的地址传给这个函数,用int*的实参就可以接收&a这个形参

然后,类比到我定义的 sd* head类型的变量,传递head只需要sd*就可以接收,不需要多级指针

用下面这个sd*类型作为型参就行

void print(sd* head ,int n)//n为结点
{

}

 

下面是我创建链表的部分代码:

#include <iostream>
using namespace std;
typedef struct sd
{
	struct sd* next;
	int num;

}stu;

void creat(int n)//n为结点数  ,用来创建一个含有n个结点的链表
{
	stu* head;
    head = new stu;
	stu* pr;
	stu* pf;
	//stu* head;
	//head = new stu;
	//p = head;
	cin >> head->num;
	pr = head;
	for (int i = 0;i < n-1;i++)
	{
		
		stu* p = new stu;
		cin >> p->num;
		pr->next = p;
		pr = pr->next;
		
	}
	pr ->next= NULL;//令下一个结点的指针域为0
	//cout << pr<<endl;
	pf = head;
	while (pf!= NULL)
	{
	
		cout << pf->num;
	pf = pf->next;
	cout<<endl;
	}
}
void print()//用来输出链表中的每个结点
{

}

int main()
{
	
	//p = head;
	
	creat(5);
	return 0;
}

下面来自百度百科的多级指针知识:

定义和变量定义

设有基类型为int的指针变量p定义如下:

int *p,n;

变量p的类型为int*,指针变量p可存贮一个int类型变量(例如n)的地址:

p=&n; /* n的地址存贮到指针p中,即,使p指向n */

记p的类型(int*)为T,即,p是T类型的变量。

可使用基本运算(&)

&p

来计算指针变量p的地址。上面基本运算的结果是T* 类型的,即,是

T* ≡ (int*)* ≡ int**

类型的,即是基类型为int的指针变量的地址,是基类型为int的二级指针。

若要把上面的计算结果存贮到一个变量中,我们需要定义一个T*类型的

指针变量,例如q:

T *q; ≡ (int*)*q; ≡ int **q;

变量q被称为基类型为int的二级指针变量。

下面的处理使q指向p:

q=&p;

下图1描述了int类型变量n、基类型为int的一级指针p、基类型为int的

二级指针q之间的关系:

一般地,K级指针变量的地址是K+1级指针类型的。实用上,二级指针的使用 最为广泛,三级以上的指针很少使用。

举报

相关推荐

0 条评论