首页 > 试题广场 >

下列程序的执行结果是()

[单选题]
#include <stdio.h>
int main() {
    char *a[] = {"work", "at", "alibaba"};
    char **pa = a;
    pa++;
    printf("%s", *pa);
}
下列程序的执行结果是()
  • at
  • atalibaba
  • ork
  • orkatalibaba
  • 编译错误
  • 运行溢出
发表于 2016-05-21 22:42:24 回复(6)
首先对编译器来说没有数组这一概念,数组都被看成指针,所以a[ ]就是*a,那么就是**a换成了**pa,pa即是a,换个名字而已,根据数组的++,也就是取a[1][ ]的值,即“at”。
发表于 2016-07-14 13:29:52 回复(4)
发表于 2016-05-26 19:18:36 回复(4)
数组里存储的是指针
而我们创建的变量pa相当于指向指针的指针是一个二级指针
所以我们联系之前所学的内容,其实呢就是pa指向了数组的收元素,++一次使得其指向下一个元素。


发表于 2016-05-06 15:41:08 回复(0)
选A
a            work
a+1        at
a+2        alibaba
char* *pa=a;  pa是一个指向a的指针
pa++  指向a的下一个   即a+1

发表于 2016-06-15 11:52:58 回复(1)
选A
其实把 char**pa=a 看做 (char*) *pa=a就好理解了,pa++即指向下一个字符串“at”,*pa=“at”
发表于 2016-05-06 16:00:10 回复(1)
先从普通数组理解 若有char a[ ]; 我们知道数组名是数组第一个元素的地址,即a代表a[0]的地址, 则char*a[ ]中 *a代表a[0]的地址,即a变成a[0]地址的地址 这就跟二维指针差不多了,当char**p=a的时候,p就指向数组第一个元素,再p++,*p就是"at"了
编辑于 2017-04-22 21:00:22 回复(0)

发表于 2018-06-25 14:14:38 回复(0)
**pa为字符,*pa为字符串,若想输出**pa,应该是printf("%c", **pa);
发表于 2017-11-14 14:05:34 回复(0)
如果改成(*pa)++,输出就是ork
发表于 2017-11-11 09:58:34 回复(2)
解析见二维数组的表现形式 http://m.blog.csdn.net/article/details?id=48260789
发表于 2017-03-24 21:23:25 回复(0)
此题不严谨 需要看编译器版本 在vs2017中无法通过编译,要考二级指针可以换个方法 
发表于 2017-03-26 21:38:46 回复(3)
先是定义了一个名为a的字符指针数组。这个数组有三个元素,每个元素都是一个指向字符的指针。这三个字符串是"work"、"at"和"alibaba",然后定义了一个名为pa的指针,它指向一个字符指针(即它是指针的指针)。我们将a的地址赋给pa,因此pa现在指向a的第一个元素(即指向"work"这个字符串的指针),因此pa++将使pa指向下一个字符指针,即指向"at"这个字符串的指针
发表于 2024-06-25 00:52:15 回复(0)
首先对编译器来说没有数组这一概念,数组都被看成指针,所以a[ ]就是*a,那么就是**a换成了**pa,pa即是a,换个名字而已,根据数组的++,也就是取a[1][ ]的值,即“at”。
发表于 2024-02-29 16:28:56 回复(0)
选at
1.char *a[]定义了一个指针数组,每个指针元素都是指向char类型的指针,存放单个字符的地址。
2.数组内三个字符串分别赋值给三个char指针,结果是把每个字符串首字符的地址赋给char指针(字符串看作一个数组,因此字符串中的每个字符都有地址,这里默认把首字母的地址赋值给指针)
3.**pa=a,那么pa存放数组第一个元素(这个元素是指针)的地址(a本身也是一个地址),pa++使pa存放变为数组第二个元素的地址,此时*pa的值(*pa=a[1])是数组中第二个元素,也就是at中a的地址,因此输出%s输出at
发表于 2023-04-07 21:43:26 回复(0)
pa一开始存储的是work的地址 因为pa的数据类型是char** 它的单位变成了一个char*地址 pa++ 后变成at
发表于 2022-04-07 08:46:38 回复(0)
选A a            work a+1        at a+2        alibaba char* *pa=a;  pa是一个指向a的指针 pa++  指向a的下一个   即a+1
发表于 2021-11-01 12:22:15 回复(0)
pa为char**类型指向char*类型的a[0]
 pa++先使用后++ 
先使用
pa解引用则使a[0]指向work 
再++
指向at   
这是对于整个pa的++而不是对于单纯的+1 所以指向at
若题目改为 *pa+1 则结果为ork
发表于 2021-10-10 10:39:42 回复(0)
pa就是a,
pa++就是a++,
因为a是一个指向字符串的指针数组,所以a++指向它的下一个元素的开头,
也就是at
发表于 2021-07-23 09:39:35 回复(0)
指针数组本质上还是数组,pa++即是第二个元素
发表于 2021-03-28 12:49:18 回复(0)