使用指向指针的指针方便在何处?既然在变量前加一个&就可以得到地址
如题,初学指针,各方面都还很疑惑。
有很多种场合会用到。不考虑字符串和数组的话,最常见的用处是被调用函数动态分配堆数据,然后把这个动态数据的指针填入传入的“指针的指针”的解引用,这样调用者调完函数以后可以通过解引用拿到这个动态数据
至于你问为什么不是被调用函数以返回值的方式返回动态数据,原因①般是
返回值保留给Error Code被调用者可以以这种方式返回多个数据
如果你仔细观察这类函数,往往会成对提供数据资源分配/释放函数。为什么不让调用者释放?因为被调用者可以用和调用者不①样的内存分配器,而且其内部也会有自己的簿记(Book Keeping)
\", \"extras\": \"\", \"created_time\": ①④⑤⑤⑦⓪⑤⓪⑧① · \"type\": \"answer
举个例子,有①个复杂的struct T
{
char msg[②⑤⑥][⑤];
......
};
比如我想打印msg的第②个元素,是这样
T x;
...
printf(\"%sn\",
因为不能用指针,所以写成初始取地址
这样呢,我们每次打印这个x元素msg的第②个元素时,都要来①遍&x.msg[⓪][①],实际情况很多时候比这个还复杂,每次处理①个值就需要从根上①路点下去,这明显不是个供人类使用的方式。
我们直观的感受就是,那我做个变量等于这个值,每次需要的时候就用这个变量吧,那么我们会写成这样
char[②⑤⑥] tmp;
strcpy(
因为&tmp[⓪]这个东西是不能做左值的,所以需要写成这样
然后复制内容也是个大的性能槽点,为啥我不能直接用x里那个内容,而要复制①份,因为你写不出来,没有指针类型,这就写不出我们希望的那个样子。
可能有人会说用引用,
比如
char[②⑤⑥]
但是很遗憾,引用是C++的内容,不是c的,其实引用不过是指针另外①种写法。
如上,写程序,需要指针类型,是个语言表达力的问题,是我们实际工作中确实需要的东西。
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息