龙空技术网

C++|二级指针做函数参数,更新一个指针变量本身的内存地址值

小智雅汇 313

前言:

现时姐妹们对“c语言指针指向内存地址”都比较重视,姐妹们都想要学习一些“c语言指针指向内存地址”的相关内容。那么小编也在网络上汇集了一些对于“c语言指针指向内存地址””的相关文章,希望我们能喜欢,姐妹们一起来学习一下吧!

对于指针变量,我们要区分指针变量本身的地址值,和其地址指向的具体值,也就是要熟悉指针变量特别是二级指针变量的解引用机制:

	int a=17;			//变量	int *p1 = &a;		// 一级指针变量	int **p2 = &p1;		// 二级指针变量	cout<<*p1<<endl;	// 一级指针变量解引用,得到指向的变量的具体值	cout<<p1<<endl; // 一级指针变量的值,是一个指针(内存地址)	cout<<*p2<<endl;	// 二级指针变量的一级解引用,得到的是其指向的变量的值,						// 还是一个指针变量,保存的是一个指针(内存地址)	cout<<**p2<<endl;	// 二级指针变量的二级解引用,得到的是其指向的指针变量指向的值

以上内容会输出:

170012FF440012FF4417

我们知道,用一个一级指针变量做参数,可以与其他函数共享共内在空间,可以修改指针变量指向的具体值,但如果想更新一个指针变量本身的内存地址值,则其参数必须是一个二级指针变量,解引用后可以得到一个一级指针变量:

#include <iostream>using namespace std;void GetMemory(char *p1, char **p2, int num){  *p1 = 'b';			//*pa是p1的解引用,是一个具体值 *p2 = (char *)malloc(sizeof(char) * num); // *p2是p2的解引用,还是一个指针变量 strncpy(*p2,"hello,world",num);} void Test(void) { 	char *str = NULL; 	char c = 'a';	GetMemory(&c,&str, 100); // 注意参数是 &str,而不是 str 	//strcpy(str, "hello"); 	cout<< str << endl;	cout<< c <<endl;	free(str); } void main(){	Test();	system("pause");}/*hello,worldb*/

在定义链表这种数据结构时,通常也有用到一个二级指针或指针引用来修改头节点。

-End-

标签: #c语言指针指向内存地址