左值问题
#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报错不可修改左值 左值是能够放在赋值号(=)左边的表达式或变量。在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官方接口),如未能正确解答您的问题,请继续追问。 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;
}
改成这样后程序报错,请问问题出在哪 伴学终生 发表于 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官方接口),如未能正确解答您的问题,请继续追问。 把 (*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;
} 伴学终生 发表于 2023-11-24 21:04
改成这样后程序报错,请问问题出在哪
赋值的地方需要改 tommyyu 发表于 2023-11-24 21:06
赋值的地方需要改
我有一个 好主意,可以回答所有问题,那就是:
自己想{:10_256:} 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;
}
改成这样是否正确? 伴学终生 发表于 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官方接口),如未能正确解答您的问题,请继续追问。 sfqxx 发表于 2023-11-24 21:07
我有一个 好主意,可以回答所有问题,那就是:
自己想
我想到了一个好主意,找之前的求助帖,然后人工回答,然后举报,说 “x楼是最佳”{:10_256:} 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;
} tommyyu 发表于 2023-11-24 21:09
我想到了一个好主意,找之前的求助帖,然后人工回答,然后举报,说 “x楼是最佳”
牛
页:
[1]