问题
#include <stdio.h>int main()
{
char *s="abcdef";
s=s+2;
printf("%d\n",s);
printf("%p",s);
}
想问第一个printf()里面这个%d输出的是什么?
遇到的题目,题目答案给的是字符c的地址。
printf("%s",s);///输出cdef 答案没错,是c的地址
两个打印结果都是c的地址,%p是以十六进制打印,%d是十进制 你给出了答案,从答案看是s是字符串的首地址指向字符a,s+2是向后偏移了两个字符也就是指向c字符,%d是以十进制的方式输出,而%p应该是以地址的方式输出 本帖最后由 临时号 于 2022-6-5 21:51 编辑
1.%d是指用十进制输出内容,%p是指用十六进制输出地址
2.答案是正确的
首先,你定义了一个字符串 char *s="abcdef";
然后,你让这个指针向后移了两位(移动到了c的地址),因此,c语言会从'c'开始读取,到'\0'(c语言代表字符串结束的标志)结束,所以这句话等同于char *s="cdef";
所以,你用十进制去输出s这个指针所指向的地址时,实际上是输出c的地址,十六进制也同理 {:10_245:}{:10_245:}{:10_245:}{:10_245:} {:10_279:} {:5_109:} {:10_256:} {:5_90:} {:10_256:} {:5_90:} {:10_245:}{:10_245:}{:10_245:}能中吗?? {:5_103:} 正在学习中 {:10_249:} 指针s是输出地址,*s才是输出代表的内容,你s+2所以是c的地址咯 小问题
页:
[1]