首页 > 试题广场 >

以下程序的输出结果为( ) 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
arr是一个一级指针数组 需要用一个二级指针ptr来接收一级指针数组的第一个数组的首地址 另一个函数参数列表中用同样是二级指针的str来接收二级指针ptr中存放的地址 也就是把一级指针数组的首地址通过中间变量ptr 交给了二级指针str ++str之后ste指向了arr数组的第二个数组 对str解引用 就为第二个数组的内容 即world
发表于 2021-04-22 22:33:03 回复(0)
别看错哦 是print

发表于 2019-11-15 01:47:03 回复(0)
arr是一个指针数组,ptr指向此数组首元素的地址(数组名代表数组首元素地址),ptr+1指向数组第二个元素的地址,因为数组中的元素为字符型指针,因此*(ptr+1)才是字符串"world"的首地址,输出显示world
发表于 2020-05-01 18:33:20 回复(0)

const char *a[]={ "fortran", " basic", "pascal", "java", "c++" }; 
cout << a[3] << endl;  //打印 java
cout << *a[3] << endl;  //打印 j

    这是一个指针数组,数组中存放的是指向字符串的char型指针,a[3]就是第三个char*指针,即指向“java”的指针,但是cout<<a[3]输出的是该指针所指向的字符串的内容。

int val = 1234;
int* temp = &val;
cout << temp << endl;  //打印val的地址
cout << *temp << endl;  //打印1234
    temp是一个int类型的指针变量,其中存放的是val的地址,cout<<temp输出的是val的地址,cout<<*temp输出的才是val的值1234。

总结:

1.cout一个char型指针会打印其中内容,而cout一个int型指针会打印其地址

2.cout一个char型指针的解引用会打印这个指针指向的内容即上述的'j',cout一个int型指针的解引用也会打印这个指针指向的内容即上述的1234

3.char *ptr = "java";指针形式存储的字符串是字符常量,最好加上const,数组a也最好加上





发表于 2023-04-09 11:07:51 回复(0)
char *arr[]={"hello", "world", "c++"}为指针数组,相当于一个二维数组;
在print()函数中,对ptr进行+1,并且进行cout<<*ptr<<endl操作,即
指向二维数组arr[1][ ], 并进行输出。
简单一点来说,
arr:
0     "hello", 
1     "world",
2     "c++"
ptr+1后指针从第0行指向第一行的数组,即  "world"。该题想要输出指向后的内容。
发表于 2022-02-23 21:29:41 回复(0)
没懂
发表于 2021-02-02 22:04:27 回复(0)
为什么我运行不了
错误(活动)    E0144    "const char *" 类型的值不能用于初始化 "char *" 类型的实体    
求解!!!


发表于 2023-11-14 18:04:05 回复(0)
char*是指向第二个字符数组,但是说它指向w的启始地址有错?
发表于 2021-05-10 23:31:08 回复(3)
二级指针存放的是一级指针的首地址
发表于 2023-06-24 11:35:16 回复(0)
str是二级指针,str的值表示所指向内存的首地址,*str为该地址所对应的内容
发表于 2021-11-22 14:31:25 回复(0)