前言:
现时姐妹们对“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语言指针指向内存地址