素食蛤蟆 发表于 2018-3-29 17:13:40

指向指针的指针存在的意思是什么?

一直没搞明白指向指针的指针有什么优势?请大侠们赐教。谢谢!

BngThea 发表于 2018-3-29 17:17:54

可以用来指向字符串数组

素食蛤蟆 发表于 2018-3-29 17:23:14

BngThea 发表于 2018-3-29 17:17
可以用来指向字符串数组

有道理,谢谢大侠。看参考书讲指向指针的指针举例都是二维数组,感觉多此一举啊。除了能把我整蒙之外没啥卵用。大侠一句醍醐灌顶,谢谢。

ba21 发表于 2018-3-29 18:05:17

newu 发表于 2018-3-29 18:54:13

我想你应该是在问二级指针存在的意义吧?剩下的如果你真正想了解的话可以百度下他的意义。

风扫地 发表于 2018-3-30 14:42:52

本帖最后由 风扫地 于 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:25:19

本帖最后由 桃花飞舞 于 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]
查看完整版本: 指向指针的指针存在的意思是什么?