首页 > 试题广场 >

有以下程序,程序的输出结果是?

[单选题]

以下程序的输出结果是

#include <stdio.h>
void fun(char *p, int n) {
    char b[6] = "abcde";
    int i;
    for (i = 0, p = b; i < n; i++)
        p[i] = b[i];
}

int main() {
    char a[6] = "ABCDE";
    fun(a, 5);
    printf("%s\n", a);
}


  • abcde
  • ABCDE
  • edcba
  • EDCBA
推荐
本题考查数组名作为函数参数,执行f函数时,传进去的a指针被重新指向了b,所以原本a数组的地址内容不变,所以输出结果为ABCDE,答案为B选项。
编辑于 2015-02-03 17:48:05 回复(4)
很容易搞错的一道题,函数传递数组时,不是用的数组的副本,而是原数组本身,在本题中,调用函数时,p指向数组a的第一个元素,但在for循环中,有p=b,又把b的地址赋予了p,使p指向b的第一个元素,此时p与a已无关了。。。。。答题时一定要注意题中的陷阱。。
发表于 2016-03-19 00:27:22 回复(7)
p=b改变了指针p的指向,所以原来的就没有发生改变。如果没有这一句就会发生改变
发表于 2015-09-26 19:59:33 回复(0)

在本题中,调用函数时,p指向数组a的第一个元素,但在for循环中,有p=b,又把b的地址赋予了p,使p指向b的第一个元素,此时p与a已无关了.但是如果没有p=b;这个t条件,那么p就是指向的a,p[i]=b[i]改变的就是数组a,程序运行如下图所示,分别有p=b,和没有p=b.













发表于 2017-03-22 15:21:52 回复(0)
指针做函数参数,本质上还是值传递,传进去的是地址的副本
发表于 2017-02-10 11:01:36 回复(0)
区别实参与形参,main函数中的是实参,传递形参不会改变实参的数值,因此输出还是实参。要想改变实参的数值,可以传递地址。
发表于 2019-01-14 10:48:54 回复(0)
一开始指针p指向原数组a[6]的,后来指针p又被从新赋值了以后就指向了b[6]了,所以后来a[6]数组里的内容根本没变。

发表于 2017-11-24 19:38:51 回复(0)
主要是看p=b这一个,正因为如此,p指向了b,那么跟a数组就无关了。所以a是原来的内容,不然的话内容就成了b的。
#include <stdio.h>
void fun ( char *p,int n )  {    
char b [6] = "abcde"; int i;    
for ( i = 0,;i < n;i + + )         
p [i] = b [i];
}
main( ){    
char a [6] = "ABCDE";    
fun (a,5);     
printf ("%s\n",a ) ;}
输出的是abcde
编辑于 2017-03-10 19:53:59 回复(0)
答案B
调用fun函数时,p指针指向a
p = b ,p指针指向b
a地址的内容没有发生改变。
发表于 2015-08-30 15:44:22 回复(0)
fun()函数内部有个陷阱,p=b;这条语句改变了整个程序的走向。有了这条语句,fun()中的p指针即失去了跟原函数之间的关联,题目打印主函数中的字符串,答案为B。如若没有这条语句,则输出A。
发表于 2021-01-22 12:44:15 回复(0)
调用函数时,p指向数组a的第一个元素,但在for循环中,有p=b,又把b的地址赋予了p,使p指向b的第一个元素,此时p与a已无关了
发表于 2017-08-28 22:29:30 回复(0)
n b
发表于 2025-12-14 02:21:22 回复(0)
在循环中p又指向了b,否则是可以修改a数组中的值
编辑于 2024-03-01 10:06:35 回复(0)
特别容易没有注意到细节
如果:
for (i = 0, p = b; i < n; i++)   -> 最终打印的是 ABCDE
如果:
for (i = 0; i < n; i++)   -> 最终打印的是 abcde

发表于 2022-03-09 17:14:37 回复(0)
很容易搞错的一道题,函数传递数组时,不是用的数组的副本,而是原数组本身,在本题中,调用函数时,p指向数组a的第一个元素,但在for循环中,有p=b,又把b的地址赋予了p,使p指向b的第一个元素,此时p与a已无关了。。。。。答题时一定要注意题中的陷阱。。
发表于 2020-10-06 18:51:06 回复(0)
<p>漏看了,在for循环里有个p=b</p>
发表于 2020-08-23 13:04:30 回复(0)
没仔细看,没看到p=b这句,尴尬了
发表于 2020-06-12 21:23:51 回复(0)
压根没看到有一句p = b 爷🤮🌶
发表于 2020-05-06 10:04:52 回复(0)
注意审题:for循环的循环条件①是i=0,p=b,这时p跟a无关了,不会影响a地址里面的值。
发表于 2019-08-20 09:09:02 回复(0)
一晚上被坑两次,都是属于传进去不改变自己的类型
发表于 2019-07-31 01:17:52 回复(0)
题目实际考察的是传值,f函数中的形参p与传入的实参a仅仅只是值相同,指向相同的数组A的起始地址,但是在函数f中将形参p重新指向了局部数组b,从而并没有改变数组a的值
发表于 2019-03-27 16:52:10 回复(0)