C 什么情况下使用** (双重指针)
答案:5 悬赏:80 手机版
解决时间 2021-01-30 06:57
- 提问者网友:箛茗
- 2021-01-29 06:35
C 什么情况下使用** (双重指针)
最佳答案
- 五星知识达人网友:荒野風
- 2021-01-29 07:25
int *p1,*p2,*p3,*p4,*p5;
p1 = p2 = p4 = p5 =null; p3 =0 初始化了;
Func(int *p1,int *p2,int *p3,int **p4,int **p5)
{
int a = 1;
p1 = &a;
*p2 =a;
p3 =&a;
*p4 = new int[256];
*(*p4) = a;
*p5 =&a;
}
Func(p1,p2,p3,*p4,*p5)
明白了吧。在Func不管是a还是形参,都是一份拷贝(相当于局部),
所以,P1赋值了,出了函数,没用了,只是拷贝变了,本体没变,
P2没有初始化,出错,P3正确
P4在函数内新申请了地址即初始化并且被赋值,并且内容通过指针的指针被传递出去,记得是通过形参传递出去而不是返回值。
P5同样能传递,但是。。传的a的地址,地址是对的,可是a没了。。局部变量,所以。。值不确定
调用Func(p1,p2,p3,&p4,&p5)
那么p3,p4都对我干么用p4呢,
请注意,p3返回的是个确定的值即内容,当你想要一个值的时候,
比如,p3 = "abc";是个确定的字符串所以形参可写(const char* szValue)
如果你想得到的是一个地址,即内容不确定,但是地址确定,就要用**P了
p1 = p2 = p4 = p5 =null; p3 =0 初始化了;
Func(int *p1,int *p2,int *p3,int **p4,int **p5)
{
int a = 1;
p1 = &a;
*p2 =a;
p3 =&a;
*p4 = new int[256];
*(*p4) = a;
*p5 =&a;
}
Func(p1,p2,p3,*p4,*p5)
明白了吧。在Func不管是a还是形参,都是一份拷贝(相当于局部),
所以,P1赋值了,出了函数,没用了,只是拷贝变了,本体没变,
P2没有初始化,出错,P3正确
P4在函数内新申请了地址即初始化并且被赋值,并且内容通过指针的指针被传递出去,记得是通过形参传递出去而不是返回值。
P5同样能传递,但是。。传的a的地址,地址是对的,可是a没了。。局部变量,所以。。值不确定
调用Func(p1,p2,p3,&p4,&p5)
那么p3,p4都对我干么用p4呢,
请注意,p3返回的是个确定的值即内容,当你想要一个值的时候,
比如,p3 = "abc";是个确定的字符串所以形参可写(const char* szValue)
如果你想得到的是一个地址,即内容不确定,但是地址确定,就要用**P了
全部回答
- 1楼网友:青尢
- 2021-01-29 09:06
最常见的就是“字符串数组”了。例如:
#include <iostream>
#include <string>
using namespace std;
void main()
{
char **ppstrarr = new char*[5]; //分配一个指针数组, 将其首地址保存在ppstrarr中
// assignment
for (int currow = 0; currow<5; ++currow)
{
ppstrarr[currow] = new char[128];
char tmp[128] = {0};
sprintf_s(tmp, sizeof(tmp), "test_string_c-format_%d", (currow + 1));
strncpy_s(ppstrarr[currow], 128, tmp, 128);
}
// output
for (int currow = 0; currow<5; ++currow)
{
cout<<*(ppstrarr + currow)<<endl;
}
cout<<endl;
// release
for (int currow = 0; currow<5; ++currow)
{
delete []ppstrarr[currow];
ppstrarr[currow] = null;
}
delete []ppstrarr;
ppstrarr = null;
}
- 2楼网友:神鬼未生
- 2021-01-29 08:47
二维数组
- 3楼网友:孤独入客枕
- 2021-01-29 08:10
指向指针的指针
- 4楼网友:第幾種人
- 2021-01-29 07:41
多了去了,你可以在2维数组上也玩把指针的指针。
int a[3][4];
int **p,*p1[3];
p1[0]=a[0];p1[1]=a[1];p1[2]=a[2];
p=&p1[0];
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯