鱼C论坛

 找回密码
 立即注册
查看: 1954|回复: 9

[技术交流] 关于指针数组向各位老师请教

[复制链接]
发表于 2017-12-17 18:34:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

#include <stdio.h>
int main(void)
{
int a=2, b = 3, c = 4;
        int *pa = &a,*pb = &b,*pc = &c;
        int    *num[3] = {pa,pb,pc};
        char *str[3] = {"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[3]的值 wall,真确输出;
        printf("%s\n",**(str+1));                        // 4        没有输出 且整个程序运行后出错;

        return 0;

}

向各位老师请教:num和str为相同的类型,同为指针数组,但是输出的不同的结果;例如:*(num+1)输出的是第1个元素pb的地址,而*(str+1)输出的不是第1个元素"wall”的地址而是wall本身;
               
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-17 19:34:05 | 显示全部楼层
printf("%s\n",**(str+1));                        // 4        没有输出 且整个程序运行后出错;
在你看来,应该输出什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-17 20:14:00 From FishC Mobile | 显示全部楼层
字符串输出其地址就是字符串本身
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-18 07:34:02 | 显示全部楼层
人造人 发表于 2017-12-17 19:34
printf("%s\n",**(str+1));                        // 4        没有输出 且整个程序运行后出错;
在你看 ...

在我看来,此式应该输出字符串wall本身。式3应该输出地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-18 07:35:24 | 显示全部楼层
BngThea 发表于 2017-12-17 20:14
字符串输出其地址就是字符串本身

是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-18 08:10:07 From FishC Mobile | 显示全部楼层
changyouren88 发表于 2017-12-18 07:35
是这样

两个重复的帖子,那边我回复了,有问题在那边问吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-18 13:26:37 | 显示全部楼层
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         int a = 2, b = 3, c = 4;
  5.         int *pa = &a, *pb = &b, *pc = &c;
  6.         int *num[3] = {pa, pb, pc};
  7.         char *str[3] = {"geat", "wall", "china"};

  8.         printf("输出pb的地址:              %p\n", &pb);
  9.         printf("输出b的地址:               %p\n", &b);


  10.         // 1 输出pb的地址,正确输出
  11.         printf("这个是pb的地址还是b的地址: %p\n", *(num + 1));
  12.         printf("输出b的值: %d\n", **(num + 1));                                // 2 输出b的值3,正确输出

  13.         printf("%s\n", *(str + 1));                                        // 3 输出str[3]的值 wall,真确输出;
  14.         //printf("%s\n", **(str + 1));                                        // 4 没有输出 且整个程序运行后出错;

  15.         return 0;
  16. }
复制代码

无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-19 09:40:59 | 显示全部楼层

哦,是的,我弄错了,楼主真是仔细,耐心,这下就明白了,非常感谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-19 09:42:29 | 显示全部楼层
指针和数组真是剪不断理还乱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-27 21:18:27 | 显示全部楼层
应该是系统自身对num和str的代码不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表