tyf1218405122 发表于 2022-6-5 21:18:44

问题

#include <stdio.h>

int main()
{
        char *s="abcdef";
        s=s+2;
        printf("%d\n",s);
        printf("%p",s);
}

想问第一个printf()里面这个%d输出的是什么?
遇到的题目,题目答案给的是字符c的地址。

jhq999 发表于 2022-6-5 21:30:57

printf("%s",s);///输出cdef

风车呼呼呼 发表于 2022-6-5 21:38:38

答案没错,是c的地址
两个打印结果都是c的地址,%p是以十六进制打印,%d是十进制

桃花飞舞 发表于 2022-6-5 21:41:24

你给出了答案,从答案看是s是字符串的首地址指向字符a,s+2是向后偏移了两个字符也就是指向c字符,%d是以十进制的方式输出,而%p应该是以地址的方式输出

临时号 发表于 2022-6-5 21:50:15

本帖最后由 临时号 于 2022-6-5 21:51 编辑

1.%d是指用十进制输出内容,%p是指用十六进制输出地址
2.答案是正确的
首先,你定义了一个字符串 char *s="abcdef";
然后,你让这个指针向后移了两位(移动到了c的地址),因此,c语言会从'c'开始读取,到'\0'(c语言代表字符串结束的标志)结束,所以这句话等同于char *s="cdef";
所以,你用十进制去输出s这个指针所指向的地址时,实际上是输出c的地址,十六进制也同理

kerln888 发表于 2022-6-6 08:11:56

{:10_245:}{:10_245:}{:10_245:}{:10_245:}

超级无敌磊果果 发表于 2022-6-6 08:22:26

{:10_279:}

1050293757 发表于 2022-6-6 08:48:56

{:5_109:}

豆嘉木 发表于 2022-6-6 10:37:47

{:10_256:}

画画的babi 发表于 2022-6-6 18:41:08

{:5_90:}

xueCxueCxueJava 发表于 2022-6-6 18:41:21

{:10_256:}

画画的babi 发表于 2022-6-6 18:46:03

{:5_90:}

kerln888 发表于 2022-6-7 08:35:09

{:10_245:}{:10_245:}{:10_245:}能中吗??

haoren1ge 发表于 2022-6-7 08:58:25

{:5_103:}

myqf123 发表于 2022-6-9 09:05:50

正在学习中

豆嘉木 发表于 2022-6-9 09:13:49

{:10_249:}

AiXueXiDeDai 发表于 2022-6-10 06:26:14

指针s是输出地址,*s才是输出代表的内容,你s+2所以是c的地址咯

豆嘉木 发表于 2022-6-10 11:37:02

小问题
页: [1]
查看完整版本: 问题