64,687
社区成员
发帖
与我相关
我的任务
分享
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q;
int k;
for(k=0;k <5;k++)
{
*q=s[k];
printf("%s\n",*q);
}
system("pause");
return 0;
}
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q;
int k;
for(k=0;k <5;k++)
{
q=&s[k]; //这
printf("%s\n",*q);
}
return 0;
}
char **q; //编译器只会为q分配内存,但q具体指向哪还未确定。
//即q是指向char**的一个指针,因此你可以用p去进行操作
//但是,*p却并未定义,内存结构类似于下:
// | q |->| *q |->| "abc" |
// 因此,如果你要操作*q,就要首先给*q分配内存,也即初始化
// 记住,只有初始化后的内存才可以进行操作,初始化可以new,也可以赋值
#include <stdio.h>
int main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q;
int k;
q=new char*; //这才是赋值一级指针得正确方法,我们不需要分配5个单元,也不能把现有得某个单元给它,因为没有空余得一级指针可以被你借用
for(k=0;k <5;k++)
{
*q=s[k]; //再赋二级指针;
printf("%s\n",*q);
}
return 0;
}
#include <stdio.h>
int main()
{
char *s[]={"man","woman","girl","boy","sister"};
char *q;
int k;
for(k=0;k <5;k++)
{
q=s[k];
printf("%s\n",q);
}
return 0;
}
#include <stdio.h>
int main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q;
int k;
q=&s[0]; //先赋一级指针;
for(k=0;k <5;k++)
{
*q=s[k]; //再赋二级指针;
printf("%s\n",*q);
}
return 0;
}
char **q=s; //q的地址是s的首地址啦,当然会没有问题,不管是分配的还是赋值操作,起码保证操作*q时q有对应的内存值就对了
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q=s;
int k;
for(k=0;k <5;k++)
{
*q=s[k]; //OK, *q=s[k]; not ok,为什么
printf("%s\n",*q);
}
system("pause");
return 0;
}
char **q=new char*[5];
那你的意思是, 这个是初始化一级指针咯。
不是已经告诉你了嘛!
char **q;
*q=s[k]; //请问此时q的地址事多少?(明显没有初始化,q的地址不知道又如何找到*q,q和*q是有连带关系的)
把代码改成如下:
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
char *s[]={"man","woman","girl","boy","sister"};
char **q=new char*[5]; //为变量q分配空间
int k;
for(k=0;k <5;k++)
{
*q=s[k];
printf("%s\n",*q);
}
system("pause");
return 0;
}