首页 > 试题广场 >

下面程序的正确执行结果为 ( )

[单选题]

下面程序的正确执行结果为()

#include<iostream>
using namespace std;

void fun(const char** m) {
    m++;
    cout << *m << endl;
}

void main() {
    static const char* a[] = { "MORNING", "AFTERNOON", "EVENING" };
    const char** n;
    n = a;
    fun(n);
}

  • AFTERNOON
  • 为空
  • MORNING
  • EVENING
《深入理解C指针》中有句话:给指针加上一个整数实际上加的数是这个整数和指针数据类型对应字节数的乘积。这里m指针指向的是char*类型,且是第一个字符串的地址,指向的字符串长度是7字节。那么m地址实际所加上的值是7,也就是跳过了“MORNING”。m++后指向“AFTERNOON”的首地址,解引用后,m就是字符串“AFTERNOON”
发表于 2021-03-19 08:07:45 回复(3)
a[0],a[1],a[2]都为指针数组的元素,分别为字符数组“MORNING”、“AFTERNOON”、“EVENING”的首地址,而a为a[0]的地址(指针),a++后,a为a[1]的地址(指针),按照cout输出时会将指向的那个地址的字符数组输出出来,所以为“AFTERNOON”
发表于 2020-09-15 15:45:09 回复(0)
m++等价于m=m+1,指向m[1]地址;
如果m=&m+1,则认为加上二维数组整个大小,因此为空
发表于 2020-08-29 11:54:16 回复(2)
  1. 在主函数main()中,定义了一个静态的常量字符指针数组a,包含三个字符串元素:"MORNING"、"AFTERNOON"和"EVENING"。
  2. 定义了一个常量字符指针指针n。
  3. 将a赋值给n,此时n指向a数组的第一个元素的地址。
  4. 调用函数fun(n),将n传递给fun()函数中的形参m。
  5. 在fun()函数中,m++将m指向n数组的下一个元素,即指向"AFTERNOON"的地址。
  6. 输出*m的值,即输出"AFTERNOON"。
发表于 2023-09-25 16:13:04 回复(0)
为什么不是**m啊,求大神解答☺️
发表于 2022-01-17 08:54:13 回复(3)
char *a也可以当做二维数组
发表于 2020-08-09 01:51:18 回复(0)
char* a[]代表的是a是一个数组,a里面的元素是字符指针。则m为指向字符指针的指针,m++则m指向下一个字符指针,然后*m就是提取当前指向的字符指针所指向的内容,也就是AFTERNOON。应该是这样吧
发表于 2023-03-01 13:15:41 回复(0)
为什么我把main函数中,定义a 和n的const去掉就报错啊
发表于 2022-04-12 18:56:15 回复(1)
我一开始比较迷惑为什么是两个*,大概理解了一下,右边的*应该是为了*m的指针偏移,左边的*应该相当于地址传递
发表于 2022-04-29 14:56:45 回复(0)