指向指针的指针存在的意思是什么?
一直没搞明白指向指针的指针有什么优势?请大侠们赐教。谢谢! 可以用来指向字符串数组 BngThea 发表于 2018-3-29 17:17可以用来指向字符串数组
有道理,谢谢大侠。看参考书讲指向指针的指针举例都是二维数组,感觉多此一举啊。除了能把我整蒙之外没啥卵用。大侠一句醍醐灌顶,谢谢。 我想你应该是在问二级指针存在的意义吧?剩下的如果你真正想了解的话可以百度下他的意义。 本帖最后由 风扫地 于 2018-3-30 15:06 编辑
1、C语言的是面向内存的语言,所有的变量( 包括指针变量 )的定义都是向内存申请空间然后放数据。
2、指针变量代表着有 sizeof( ( void *) ) 字节 的空间被申请分配下来,里面存放的数据通常用来表示另外一个 变量/函数 在内存中的地址。
3、指针的指针变量 代表着 有 sizeof( (void **)) 字节的空间被申请下来,里面存放的数据也是地址,只不过这个地址指向的空间存放的是一级指针。
形象化地解释见本帖的4楼。
int a = 0;/*申请 sizeof( int) 个字节的长度的空间 ,里面放一个数据 0 */
int *p = &a; /* 申请 sizeof( int *) 个字节长度的空间 ,把整形变量a的地址存放在 p对应的空间中 */
int **q = &p; /* 申请sizeof( int **)个字节长度的空间,把指针变量p的地址存放在q对应的空间中 */
二级指针使用举例:
有需求场景,才会创造新的解决机制。
上面的代码中,p指向的是a,如果我们想通过调用一个函数将p的指向更改为一个全局变量,能够区别值传递和地址传递的你一定知道要得到p的地址才能改变p的值,p的地址获取以后我们要赋值给什么类型的变量了? 这样二级指针变量就顺势引出了。。。当然这个例子比较简单,在一些复杂数据结构里面,比如在链表中,想封装头指针的指向改变的函数这样的应用场景。
void changeP( int ** q)
{
*q = &global_var; // global_var是某个全局变量的名字
}
此函数的调用方式为:
int **q = &p;
changeP(q);
或者
changeP( &p);
举例参考:
https://blog.csdn.net/lisngwei/article/details/44097787
https://www.baidu.com/s?wd=%E4%BA%8C%E7%BA%A7%E6%8C%87%E9%92%88%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF&ie=UTF-8
【愿天下提问人按时结贴】。
本帖最后由 桃花飞舞 于 2018-3-31 02:27 编辑
void GetMemory(char **p, int num)
{
*p=(char*)malloc(num);
}
void Test(void)
{
char *str=NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
不知道能和楼主问的问题一不一样,我感觉有点关系,专业的名词我不懂》
页:
[1]