首页 > 试题广场 >

下面三个函数,哪个是正确的?

[单选题]
下面函数正确的是()
  • void swap(int * p,int *q)
    {
            int temp;
            temp = *p;
            *p = *q;
            *q = temp;
    }
  • void swap(int* p,int* q)
    {
            int* temp;
            *temp = *p;
            *p = *q;
            *q = *temp;
    }
  • void swap(int* p,int* q)
    {
            int* temp;
            temp = p;
            p = q;
            q = temp;
    }
  • void swap(int p, intq)
    {
    int temp;
    temp = p;
    p = q;
    q = temp;
    }
不明白这题到底要表达的是什么意思

发表于 2020-09-01 15:41:10 回复(0)
对于D:不用指针,又没有返回值,函数没有意义
B和C我参考C++ prime plus 中4.7.2节:在C++创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。本题中temp这个指针的指向是不确定的,这种错误可能引发一些最隐匿、最难以追踪的bug。
一定要在*之前将指针初始化成一个确定、适当的地址。
编辑于 2021-03-07 21:50:50 回复(2)
    只交换形参不能改变实参的值,需要通过指针来间接修改实参的值。
发表于 2020-12-23 18:49:35 回复(1)
C里面只是交换了p和q的指向,不影响原来的变量。
发表于 2020-10-22 21:21:29 回复(0)

A 选项中的函数定义了一个swap函数,接受两个指针作为参数。在函数体内,通过指针操作实现了交换两个指针所指向的值。这是一种常用的交换两个变量值的方法。

B 选项中的函数定义了一个swap函数,但在交换指针所指向的值之前,没有为temp指针分配内存空间,导致指针未初始化,会导致未定义行为。

C 选项中的函数定义了一个swap函数,但在交换指针指向的地址之前,只是交换了指针本身的值,并没有交换指针所指向的值,因此无法达到交换值的目的。

D 选项中的函数定义了一个swap函数,但使用的是传值方式传递参数,函数内部交换的是局部变量p和q的值,并不会对原始参数产生影响。

发表于 2023-09-26 14:18:09 回复(1)
这题考的应该是指针和int型变量的赋值问题吧。
1:int类型在C++中不能直接赋值给指针。
2:地址是常量不能赋值,所以C错了,D的问题是因为参数定义错误?
3:B为什么错误?不交换指针的地址,交换指针指向的值不行么?有大佬说下不?
发表于 2020-09-01 16:58:34 回复(7)
题目中,连三和四都不分了吗?
发表于 2021-03-08 09:35:31 回复(0)
临时变量p和q的指向交换了,但是指针指向的a和b的值始终没有发生交换。
编辑于 2023-04-30 20:39:58 回复(0)
感觉c选项的错误点应该也是在于temp指针没有初始化吧?因为交换了指针指向,到时候解引用后指向的值也变了,虽然数据的存储位置上没有发生实质的交换,但是效果也一样,可以这么理解嘛?
发表于 2023-08-04 09:54:32 回复(1)
先说C,D,指针和基本类型都是值传递。对于C来说,虽然成功交换了形参的指向,但实参指针值并不会改变。
再说B,定义在作用域内的对象要初始化,否则属于未定义行为,可能有时运行正确,有时运行就会发生错误。
发表于 2023-04-28 17:32:08 回复(0)
C哪错了
发表于 2023-04-02 12:56:14 回复(0)
。。
发表于 2022-08-30 20:14:46 回复(1)
#include <stdio.h>
#include <string.h>

void swap(int *p,int *q)
{
    int temp;
    temp = *p;
    *p=*q;
    *q =temp;
}

int main()
{
    int a =100;
    int b = 200;
    swap(&a,&b);
    printf("%d ,%d",a,b);    
    return 0;
}
发表于 2022-07-16 15:22:37 回复(0)
指针在声明时没有指向某个数据类型变量。
发表于 2022-07-14 17:34:01 回复(0)
指针交换指向行不通么?
发表于 2022-03-22 23:27:39 回复(0)
只交换形参不能改变实参的值,需要通过指针来间接修改实参的值。
发表于 2021-05-17 15:12:41 回复(0)
选项B是指针temp没初始化就直接赋值,段错误。
CD都是不能改变两个交换的值,语法并没什么错误。
发表于 2020-11-09 15:30:45 回复(0)
题目想要实现的功能是同时改变指针解引用之后指向的值和变量本身的值吧(菜鸡见解)。
发表于 2020-11-09 15:07:48 回复(0)
这题就是想实现变量数据的交换
发表于 2020-11-04 21:26:29 回复(0)
D选项哪里错了,不是交换两个变量的值么。
发表于 2020-09-24 23:41:31 回复(2)