首页 > 试题广场 >

下面程序段的运行结果是 ( )

[单选题]
下面程序段的运行结果是 ( )
char *s = "abcde";
s += 2;
printf("%d", s);
  • cde
  • 字符 'c'
  • 字符 'c' 的地址
  • 无确定的输出结果
指针s保存的是字符串的首地址,s+=2后,指向了字符‘c’,格式化输出s就是字符‘c’的地址
发表于 2017-11-12 13:00:51 回复(1)
谁会这么写程序呢?指定有点什么大病,看到这样的,建议直接把写程序的同事打屎
发表于 2021-09-29 10:38:57 回复(0)
失误,看的太快了,看成s%
发表于 2017-11-18 16:51:36 回复(0)
这段代码的运行结果是无法预测的,因为在 printf 函数中使用了 %d 格式化字符来打印一个指针变量的值,这是不正确的做法。指针变量的值在不同的平台或操作系统下可能会有不同的表示方法,因此用 %d 格式化字符输出指针变量的值会导致不可预测的错误。

另外需要注意的是,在这段代码中,指针变量 s 是一个指向常量字符串的指针,它指向的字符串是不可修改的。因此,尽管 s+=2 这句代码让指针指向了字符 'c',但是我们不能通过 s 指针来修改字符串的内容。
发表于 2023-04-04 10:51:01 回复(0)
这里答案应该是不对的,我试了一下printf("%p", s);和printf("%d", s);在我电脑上输出不同的值,而%p才是地址。
发表于 2022-02-17 11:00:24 回复(1)
刚刚试了下 %d 打印的是10进制的地址 %p 打印的是16进制的地址 #include <stdio.h> int main() { char *s="abcde"; s+=2; printf("%%p = %p\n",s); printf("%%d = %d\n",s); printf("\"abcde\" = %p\n","abcde"); printf("\"abcde\"+2 = %p\n","abcde"+2); }</stdio.h>
编辑于 2024-02-22 16:49:39 回复(0)
发表于 2022-07-26 09:25:29 回复(0)
%d !
发表于 2020-09-30 09:33:19 回复(0)
这么看就好了
s=>&s[0]
s+2=>&s[2]
发表于 2023-09-10 19:05:53 回复(0)
不是数组指针才能直接用名称吗,s是一个指针指向字符串所在地址指针
发表于 2023-08-02 10:22:21 回复(0)
编译都通过不了一群人还说的头头是道我愿称你们为最强 %d 和%p都不分的码
编辑于 2022-02-19 15:15:00 回复(1)
<p>输出地址不是%p吗</p>
发表于 2020-08-31 16:43:00 回复(0)