关于指针数组向各位老师请教
#include <stdio.h>
int main(void)
{
int a=2, b = 3, c = 4;
int *pa = &a,*pb = &b,*pc = &c;
int *num = {pa,pb,pc};
char *str = {"geat","wall","china"};
printf("%p\n",*(num+1)); // 1输出pb的地址,正确输出
printf("%d\n",**(num+1)); // 2 输出b的值3,正确输出
printf("%s\n",*(str+1)); // 3 输出str的值 wall,真确输出;
printf("%s\n",**(str+1)); // 4 没有输出 且整个程序运行后出错;
return 0;
}
向各位老师请教:num和str为相同的类型,同为指针数组,但是输出的不同的结果;例如:*(num+1)输出的是第1个元素pb的地址,而*(str+1)输出的不是第1个元素"wall”的地址而是wall本身;
printf("%s\n",**(str+1)); // 4 没有输出 且整个程序运行后出错;
在你看来,应该输出什么? 字符串输出其地址就是字符串本身 人造人 发表于 2017-12-17 19:34
printf("%s\n",**(str+1)); // 4 没有输出 且整个程序运行后出错;
在你看 ...
在我看来,此式应该输出字符串wall本身。式3应该输出地址 BngThea 发表于 2017-12-17 20:14
字符串输出其地址就是字符串本身
是这样 changyouren88 发表于 2017-12-18 07:35
是这样
两个重复的帖子,那边我回复了,有问题在那边问吧 #include <stdio.h>
int main(void)
{
int a = 2, b = 3, c = 4;
int *pa = &a, *pb = &b, *pc = &c;
int *num = {pa, pb, pc};
char *str = {"geat", "wall", "china"};
printf("输出pb的地址: %p\n", &pb);
printf("输出b的地址: %p\n", &b);
// 1 输出pb的地址,正确输出
printf("这个是pb的地址还是b的地址: %p\n", *(num + 1));
printf("输出b的值: %d\n", **(num + 1)); // 2 输出b的值3,正确输出
printf("%s\n", *(str + 1)); // 3 输出str的值 wall,真确输出;
//printf("%s\n", **(str + 1)); // 4 没有输出 且整个程序运行后出错;
return 0;
}
人造人 发表于 2017-12-18 13:26
哦,是的,我弄错了,楼主真是仔细,耐心,这下就明白了,非常感谢!!!{:5_110:}{:5_109:} 指针和数组真是剪不断理还乱{:5_100:} 应该是系统自身对num和str的代码不一样
页:
[1]