首页 > 试题广场 >

以下程序的输出结果为( ) usi...

[单选题]
以下程序的输出结果为()
using namespace std;
void print(char **str) {
    ++str;    
    cout<<*str<<endl;
}
int main() {
    static char *arr[]={"hello", "world", "c++"};
    char **ptr;
    ptr=arr;
    print(ptr);
    return 0;
}

  • hello
  • world
  • 字符w的起始地址
  • 字符e

可以把 *ptr当作一个整体,指向一个char* 的字符串,然后注意下面这些情况:

*ptr = arr[0] = "hello"
(*ptr)[1] = arr[0][1] = 'e'
(*ptr + 1) = arr[0][1:] = "ello"
*(ptr + 1) = arr[1] = "world"
发表于 2019-08-21 20:52:23 回复(5)
发表于 2020-05-29 11:11:00 回复(1)
个人理解
ptr是一个指向char *变量的指针,而char*我理解为一个字符数组,也就是字符串。
发表于 2020-02-18 00:29:23 回复(0)
**ptr的实体是*ptr,str++是移动sizeof(*ptr)个单位,*ptr是指数组里第一个字符数组的首地址
发表于 2019-09-24 08:31:37 回复(0)
arr是字符串"hello"首地址的地址,因此是二级指针。
str = arr; str++; 这时,str是"world"首地址的地址。
*str: 拿到"world"的首地址,用cout输出字符串。
发表于 2021-12-14 18:28:22 回复(0)
我是真的瞎,,,原来printf是函数
发表于 2020-04-05 09:06:34 回复(1)
cout<<*ptr<
发表于 2020-12-03 15:28:05 回复(0)
题目定义了一个,字符指针数组,每个数组元素是一个字符指针,把字符串看成一个一级指针,其指向的一块内存保存了字符。则至少定义一个二级指针才能指向一级指针并取出其指向的一级指针的值也就是各字符。arr数组名相当如指向其首元素的指针,首元素相当于一个一级指针,那么arr是一个二级指针,赋值则ptr也是指向其arr保存的地址也就是一个一级指针即第一个字符串。*ptr是取出其指向的一级指针的值也就是一级指针保存的地址,就是指向一块内存其中就是字符串。
发表于 2023-02-09 01:47:38 回复(0)
这道题重点还是这两个东西的等价吧:
1、printf("%s",*str);
2、cout << *str;//更简洁且打包了printf
其实本质上取到的就是第二行首字母地址,可是系统识别出是字符串了。
那么如何打印出第二行首字母的地址呢?


发表于 2022-08-16 20:38:19 回复(0)
变量前面不加const是编译不通过的
发表于 2020-11-22 07:26:33 回复(0)
这道题在vs2017下面,编译都报错

发表于 2020-04-04 00:00:44 回复(1)
arr为指向数组的指针,arr++指向第二个数组,内存中为world
发表于 2023-02-11 14:19:24 回复(0)
我在vs上编译不了啊
发表于 2022-07-31 11:48:00 回复(1)

可以把 *ptr当作一个整体,指向一个char* 的字符串,然后注意下面这些情况:

1
2
3
4
*ptr = arr[0] = "hello"
(*ptr)[1] = arr[0][1] = 'e'
(*ptr + 1) = arr[0][1:] = "ello"
*(ptr + 1) = arr[1] = "world"
发表于 2022-05-15 14:57:51 回复(0)
指针...
发表于 2021-02-08 17:05:41 回复(0)
<p>数组指针本身就是地址</p>
发表于 2020-08-03 14:38:05 回复(0)