伴学终生 发表于 2023-11-24 20:55:05

左值问题

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void search(int (*p));

int main(){
    int a;
    for(int i=0; i<10; i++){
      scanf("%d",&a);
    }
    int (*p)=a;
    search(p);
}

void search(int (*p)){
    int count_max=0,count_min=0;
    for(int i=1; i<10; i++){
      if(p>p) count_max=i;
      if(p<p) count_min=i;
    }
    int num=0;
    num = p;
    p=p;
    p=p;
}


问题描述:输入十个数,将最小的和第一个数交换,最大的和最后一个数交换。

求助:最后p和p报错不可修改左值

FishC_GPT 发表于 2023-11-24 20:55:41

左值是能够放在赋值号(=)左边的表达式或变量。在C语言中,左值必须是可修改的。

在你的代码中,search函数的参数是一个指向整型数组的指针。这意味着search函数会接收一个整型数组的地址,并通过指针来操作数组的元素。

在main函数中,你定义了一个整型变量a,然后你尝试将整型变量a的地址传递给search函数进行操作。但是由于整型变量是一个右值,它的地址不能直接进行修改。因此,编译器会报错。

如果你想要传递一个可以修改的左值给search函数,你可以创建一个整型数组,然后将整型数组的地址传递给search函数。

以下是一个可行的示例代码:

#include
#include
#include

void search(int (*p));

int main(){
    int arr = {1, 2, 3, 4, 5};
    search(arr);
   
    return 0;
}

void search(int (*p)){
    for(int i=0; i<5; i++){
      printf("%d\n", p);
    }
}

在这个示例中,我们创建了一个名为arr的整型数组,并将它的地址传递给search函数。在search函数中,我们使用指针p来遍历整型数组并打印出每个元素的值。

希望这个解答对你有帮助!如果你还有其他问题,请随时提问。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

伴学终生 发表于 2023-11-24 21:04:40

FishC_GPT 发表于 2023-11-24 20:55
左值是能够放在赋值号(=)左边的表达式或变量。在C语言中,左值必须是可修改的。

在你的代码中,search函 ...

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void search(int (*p));

int main(){
    int a;
    for(int i=0; i<10; i++){
      scanf("%d",&a);
    }
    int (*p)=&a;
    search(p);
}

void search(int (*p)){
    int count_max=0,count_min=0;
    for(int i=1; i<10; i++){
      if(p>p) count_max=i;
      if(p<p) count_min=i;
    }
    int num=0;
    num = p;
    p=p;
    p=num;
    num = p;
    p=p;
    p=num;
}

改成这样后程序报错,请问问题出在哪

FishC_GPT 发表于 2023-11-24 21:05:25

伴学终生 发表于 2023-11-24 21:04
#include
#include
#include

void search(int ...

抱歉,之前的回答出现了错误。首先,请确保你的代码格式正确并且完整。在你提供的代码中,缺少了两个右大括号(}),其中一个应该放在search函数的最后,另一个应该放在main函数的最后。此外,你的代码中存在两个问题:

1. 参数传递问题:
   search函数的参数声明为int (*p),这意味着它接收指向整型的指针。但在调用search函数时,你直接传递了一个整型变量a的地址。更改search函数的参数声明为int *p,即只需接收一个整型指针即可,而无需通过指针类型来指定长度([])。

2. 函数定义问题:
   在调用search函数之前,应先在代码中定义search函数的实现。你可以在main函数之后添加search函数的定义。

以下是经过修正的示例代码:

#include <stdio.h>

void search(int *p);

int main() {
    int a;
    int arr[] = {1, 2, 3, 4, 5};
   
    search(arr);
   
    return 0;
}

void search(int *p) {
    for(int i=0; i<5; i++){
      printf("%d ", p);
    }
}

在这个示例代码中,我们将search函数的参数修改为int *p,并在main函数中定义了一个整型数组arr。然后,我们调用search函数,并将整型数组的地址arr作为参数传递给search函数。在search函数中,我们通过循环访问数组元素,并打印出它们的值。

希望这次的回答能够解决你的问题。如果还有其他疑问,请随时提问。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

tommyyu 发表于 2023-11-24 21:05:50

把 (*p) 都替换成 *p 就行了,p 本身即可表示指针的意思, (*p) 是一个 指针数组#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void search(int *p);

int main(){
    int a;
    for(int i=0; i<10; i++){
      scanf("%d",&a);
    }
    int *p=a;
    search(p);
    for(int i=0; i<10; ++i) {
            printf("%d ", a);
        }
}

void search(int *p){
    int count_max=0,count_min=0;
    for(int i=1; i<10; i++){
      if(p>p) count_max=i;
      if(p<p) count_min=i;
    }
    int num=0;
    num = p;
    p=p;
    p=num;
}

tommyyu 发表于 2023-11-24 21:06:29

伴学终生 发表于 2023-11-24 21:04
改成这样后程序报错,请问问题出在哪

赋值的地方需要改

sfqxx 发表于 2023-11-24 21:07:46

tommyyu 发表于 2023-11-24 21:06
赋值的地方需要改

我有一个 好主意,可以回答所有问题,那就是:

自己想{:10_256:}

伴学终生 发表于 2023-11-24 21:08:15

FishC_GPT 发表于 2023-11-24 21:05
抱歉,之前的回答出现了错误。首先,请确保你的代码格式正确并且完整。在你提供的代码中,缺少了两个右大 ...

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void search(int *p);

int main(){
    int a;
    for(int i=0; i<10; i++){
      scanf("%d",&a);
    }
    int (*p)=&a;
    search(p);
}

void search(int *p){
    int count_max=0,count_min=0;
    for(int i=1; i<10; i++){
      if(p>p) count_max=i;
      if(p<p) count_min=i;
    }
    int num=0;
    num = p;
    p=p;
    p=num;
    num = p;
    p=p;
    p=num;
}


改成这样是否正确?

FishC_GPT 发表于 2023-11-24 21:08:46

伴学终生 发表于 2023-11-24 21:08
#include
#include
#include

void search(int ...

对不起,之前的回答中仍然存在错误。以下是修正后的完整代码:

#include <stdio.h>

void search(int *p);

int main() {
    int a;
    int arr[] = {1, 2, 3, 4, 5};
   
    search(arr);
   
    return 0;
}

void search(int *p) {
    for(int i=0; i<5; i++) {
      printf("%d ", p);
    }
}

在这个例子中,我们声明了search函数接受一个整型指针p作为参数,并在main函数中定义了一个整型数组arr。然后,我们将arr的地址传递给search函数进行操作。search函数中的循环遍历整型数组并打印出每个元素的值。

请注意,在search函数内部,我们使用了指针p来访问整型数组的元素。通过使用指针,我们可以对整型数组进行修改而不是简单地读取其中的值。在这个例子中,我们只是打印了数组的值,但你可以根据需要在search函数中执行其他操作。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

tommyyu 发表于 2023-11-24 21:09:53

sfqxx 发表于 2023-11-24 21:07
我有一个 好主意,可以回答所有问题,那就是:

自己想

我想到了一个好主意,找之前的求助帖,然后人工回答,然后举报,说 “x楼是最佳”{:10_256:}

伴学终生 发表于 2023-11-24 21:13:56

tommyyu 发表于 2023-11-24 21:06
赋值的地方需要改

谢谢你,我改好了,我以为数组作为函数参数需要传数组指针,没想到传个数组名就行了,以下是我修改后的代码!

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void search(int *p);

int main(){
    int a;
    for(int i=0; i<10; i++){
      scanf("%d",&a);
    }
    search(a);
    for(int i=0; i<10; i++){
      printf("%d ",a);
    }
}

void search(int *p){
    int count_max=0,count_min=0;
    for(int i=1; i<10; i++){
      if(p>p) count_max=i;
      if(p<p) count_min=i;
    }
    int num=0;
    num = p;
    p=p;
    p=num;
    num = p;
    p=p;
    p=num;
}

sfqxx 发表于 2023-11-24 21:26:20

tommyyu 发表于 2023-11-24 21:09
我想到了一个好主意,找之前的求助帖,然后人工回答,然后举报,说 “x楼是最佳”

页: [1]
查看完整版本: 左值问题