#c
#c
Вопрос:
То, что я хочу, можно сделать с помощью простых программ, но как я могу сделать это с помощью указателя? Я думаю, что у меня где-то ошибка.
Это мои записи.
3 4 8 1 6 9 7 2 5 2.
Это вывод.
1.major=0 2.major=0
мои коды.
#include <stdio.h>
#include <stdlib.h>
void func(int*major1,int*major2);
int main() {
int major1,major2;
func(amp;major1,amp;major2);
printf("1.major=%d 2.major=%d",major1,major2);
return 0;
}
void func(int*major1,int*major2){
int array[10],i;
*major1=0;
*major2=0;
for(i=0;i<10;i ){
printf("%d.number",i 1);
scanf("%d",amp;array[i]);
if(array[i]>major1){
*major2=*major1;
*major1=array[i];
}
else if(major2>major1) {
*major2=array[i];
}
}
}
И экран ошибки.
[Warning] comparison between pointer and integer
Комментарии:
1.
if(array[i]>major1)
должно бытьif(array[i]> *major1)
2. Предупреждение почти всегда является скорее ошибкой.
Ответ №1:
Предупреждение правильное, на строках, где вы сравниваете major1
, и major2,
вам не хватает *
передних (всего 2 строки). Таким образом, все, на что вы ссылаетесь, func
должно быть *major1
и *major2
для доступа к значению за указателем.
Ответ №2:
придерживайтесь только этого
if(array[i]>*major1) {
*major2=*major1;
*major1=array[i];
}
Комментарии:
1. это только половина исправления, есть еще одна проблема чуть ниже того, что вы вставили
2. Это даже не будет предупреждением, потому что сравнение указателей совершенно законно
3. Другая половина должна быть
else if (array[i] > *major2) { *major2 = array[i]; }
такой .4. Да, это сработало, спасибо lot.@starboy_jb и я использовал то, что вы сказали, в команде else if, благодаря вам. @Ян Эбботт
Ответ №3:
Этот код может вам помочь :
#include <stdio.h>
void func(int*major1,int*major2);
int main()
{
int major1,major2;
func(amp;major1 , amp;major2);
return 0;
}
void func(int *major1,int *major2)
{
int array[10];
*major1=0,*major2=0;
for(int i=0;i<10;i )
{
printf("%d.number :",i 1);
scanf("%d",amp;array[i]);
if(array[i]>*major1)
{
*major2=*major1;
*major1=array[i];
}
if(array[i]>*major2amp;amp;*major1>array[i])
{
*major2=array[i];
}
}
for(int i=0;i<10;i )
{
if(array[i]>*major2amp;amp;*major1>array[i])
{
*major2=array[i];
}
}
printf("nThe first biggest number in this array is :%d",*major1);
printf("nThe second biggest number in this array is :%dn",*major2);
}
Комментарии:
1. относительно:
func(amp;major1 , amp;major2);
wherefunc()
вызывается, переменныеmajor1
иmajor2
уже являются указателями. итак, то, что передаетсяfunc()
, — это два указателя на указатели, а не два указателя наint