首页 > 试题广场 >

执行以下语句,输出结果为()

[单选题]
执行以下语句,输出结果为()
#include<stdio.h>
int main( ) {
char *p1 = "hello";
char *p2 = "world";
char *p3 = "a piece of cake";
char *str[] = {p1, p2, p3};
printf("%c", *(str[0] + 1));
}
  • world
  • hello
  • 编译时错误
  • 其他选项都不正确
char*p1="hello";
char*p2="world";
char*p3="a piece of cake";
char*str[]={p1,p2,p3};
printf("%c",*(str[0]+1));

str[0] 为p1 p1指向的是"hello" p1指针+1 前进一位指向字符e。最后输出e
发表于 2015-10-14 17:09:16 回复(12)
int _tmain(int argc, _TCHAR* argv[])
{
	char *p1 = "hello";
	char *p2 = "world";
	char *p3 = "a piece of cake";
	char *str[] = { p1, p2, p3 };
	cout << sizeof(*str[0]) << " " << typeid(str[0]).name() << " " << *(str[0] + 1) << endl;//typeid是类型
	cout << sizeof(*&str[0]) << " " << typeid(&str[0]).name() << " " << *(&str[0] + 1) << endl;
	cout << sizeof(*str) << " " << typeid(str).name() << " " << *(str + 1) << endl;
	cout << sizeof(*&str) << " " << typeid(&str).name() << " " << *(&str + 1) << endl;
	return 0;
}
运行结果:
1 char * e
4 char * * world
4 char * [3] world
12 char * (*)[3] 00F7F734
能看懂这个你就知道了,这个地方+1的时候都是说步长,步长就是说+1前面的这个对象 所指向的 数据类型的长度,比如 &str[0]类型是char * * 所指向的是char * 长度是指针的长度(不同机器不同)

发表于 2015-11-13 17:10:12 回复(6)
str为指针数组,str[0]=p1,因为p1指向char型,所以str[0]+1中的加1表示的意思是加一个字符的长度,所以输出为e. 指针加减,加减的是指针所指向的数据类型的长度单位。
发表于 2015-10-21 09:58:19 回复(0)
str为指针数组,他包括指向三个常量字符串的指针。str[0]指向hello的首地址(字符'h'的地址),那么str[0]+1指向字符'e'的地址,对其解引用得到的是字符e。
发表于 2017-06-11 06:39:07 回复(0)

*(str[0] + 1) = e
*(str + 1) = world

发表于 2022-04-24 15:09:50 回复(0)
char* str[]={},str是数组名,数组每个元素都是char*,str[0]取得数组首元素,也就是p1指针,p1指向字符串首元素,+1,指向下一元素,解引用得到该元素
注意 char (*str)[],这时str才是指针,指向的元素是char型数组。
发表于 2017-08-07 19:29:17 回复(1)
%C是说输出一个字母,指向了e所以输出e,千万不能以为是输出ellow
发表于 2016-11-14 18:43:03 回复(0)
看清题意%c 与%s 的区别
发表于 2016-09-18 08:51:13 回复(0)
%c只是输出一个字符
发表于 2018-03-22 10:39:21 回复(0)
因为这个都是拿指针初始化的字符串,如果开始直接用数组初始化字符串,那结果就是输出第二个字符串
发表于 2016-07-25 16:57:26 回复(0)
str[0] 为p1 p1指向的是"hello" p1指针+1 前进一位指向字符e。最后输出e
发表于 2015-12-31 09:13:48 回复(0)
结果: e
发表于 2015-10-14 17:38:14 回复(0)
str是指针数组,str[0]=p1,p1 + 1表示在p1的地址基础上移动了sizeof(char) = 1个内存单元,该地址啥不是。
发表于 2022-11-09 23:06:51 回复(0)
在这里选D,打印结果是: e ;若打印的是*(str+1)的话就选A了
发表于 2021-11-17 11:01:14 回复(1)
char*p1="hello";
char*p2="world";
char*p3="a piece of cake";
char*str[]={p1,p2,p3};
printf("%c",*(str[0]+1));
str[0]相当于p1,值为hello的首地址h,*(str[0]+1),相当于往后走了一个char的字节,输出e
(*(str[0])+1),数组指针,往后走一个整个的str,输出w
发表于 2023-11-29 15:11:31 回复(0)

*(str[0] + 1)表示访问字符指针数组str中的第一个元素所指向字符串的第二个字符。

在这段代码中,字符串"hello"被赋值给了指针变量p1,字符串"world"被赋值给了指针变量p2,字符串"a piece of cake"被赋值给了指针变量p3。然后,这些指针被放在一个字符指针数组str中,数组中的每个元素都指向一个字符串。

(str[0] + 1)
实际上等价于p1[1],它访问了字符串"hello"中的第二个字符'e'。在C语言中,字符串是以字符数组的形式存储的,每个字符都有一个对应的ASCII码值,可以通过指针和下标的方式来访问。因此,(str[0] + 1)可以看作是对字符串"hello"中第二个字符的间接访问。在这里,和+运算符的优先级相同,因此先计算表达式str[0]+1,得到字符串"hello"中的第二个字符的地址,然后再通过运算符对该地址进行解引用,得到第二个字符'e'。最终,程序将输出字符'e'


发表于 2023-02-15 12:36:11 回复(0)
%c表示输出一个字符
str[0] 为p1 p1指向的是"hello" p1指针+1 前进一位,指向字符e。
最后输出e
发表于 2023-02-14 16:05:42 回复(0)
这里数组名str代表第一个字符串,如果想输出world 为str+1,而不是str[0]+1,str[0]+1为第一个字符串的e。
发表于 2023-01-08 12:45:00 回复(0)
int _tmain(int argc, _TCHAR* argv[]) { char *p1 = "hello"; char *p2 = "world"; char *p3 = "a piece of cake"; char *str[] = { p1, p2, p3 }; cout << sizeof(*str[0]) << " " << typeid(str[0]).name() << " " << *(str[0] + 1) << endl;//typeid是类型 cout << sizeof(* cout << sizeof(*str) << " " << typeid(str).name() << " " << *(str + 1) << endl; cout << sizeof(* return 0; } 运行结果: 1 char * e 4 char * * world 4 char * [3] world 12 char * (*)[3] 00F7F734 能看懂这个你就知道了,这个地方+1的时候都是说步长,步长就是说+1前面的这个对象 所指向的 数据类型的长度,比如 &str[0]类型是char * * 所指向的是char * 长度是指针的长度(不同机器不同)
发表于 2022-12-13 00:22:00 回复(0)
*(str[0] + 1) = e *(str + 1) = world
发表于 2022-09-22 08:41:51 回复(0)