我试图运行它,但它一直给我零值。这段代码有什么问题?
#include<stdio.h>
main(){
int i,min,max,arr[3]={10,20,40};
int *ptr_arr;
ptr_arr=&arr[3];
for(i=0;i<3;i++){
if(max>*ptr_arr)
max=*ptr_arr;
if(min>*ptr_arr)
min=*ptr_arr;
}
printf("The Maximum Number Is %d\n ",max);
printf("The Minimum Number Is %d ",min);
}
答案 0 :(得分:2)
ptr_arr=&arr[3]; // points to index which is beyond no. of index of array
由于arr
的声明是arr[3]={10,20,40};
所以它的有效索引是0,1 and 2
。因此没有索引3
(数组索引以0
开头)。
min
和max
他们有什么价值?未初始化,您的代码如何提供正确的输出。
进行以下更改 -
int min=arr[0],max=0;
...
ptr_arr=arr; // points to address of array's first element
在for循环中查看条件和增量指针 -
if(max>*ptr_arr) // change condition to max<=*ptr_arr
...
ptr_arr++;
请参阅此处的示例 - https://ideone.com/r3nv8R
答案 1 :(得分:1)
代码未将min
和max
初始化为有意义的值。
做
int min = INT_MAX;
int max = -INT_MAX;
让上面的宏可用#include
<limits.h>
。
ptr_arr
被错误地初始化以指向数组之外。
待办事项
int * ptr_arr = arr; /* Here the array "decays" to address of its 1st element. */
或
int * ptr_arr = &arr[0]; /* Explicitly use the address of the array 1st element. */
代码错过了增加ptr_arr
以在循环时连续访问所有数组的元素。
添加
++ptr_arr;
作为循环的最后一个陈述。
还要仔细阅读您的代码,以便在比较中找到令人讨厌的错字。
main()
至少应该阅读int main(void)
。
答案 2 :(得分:0)
关于您的代码的几点说明:
你应该给min
和max
一个初始值(数组中的值),为什么?因为初始垃圾值可能超出了您的数组值(例如9999),这会产生错误的结果,因为您的数组没有这样的值。
另外,我不确定你为什么需要ptr_arr
?
以下是您的代码的修改版本:
#include<stdio.h>
int main(){
int i,min,max,arr[3]={10,20,40};
max = arr[0]; //initialize 'max' to be the first element of the array
min = arr[0]; //initialize 'min' to be the first element of the array
for(i=0;i<3;i++){
if(arr[i] >= max)
max = arr[i];
if(arr[i] <= min)
min = arr[i];
}
printf("The Maximum Number Is %d\n ",max);
printf("The Minimum Number Is %d ",min);
return 0;
}
另请注意我在if
声明中添加了<=
和>=
。
答案 3 :(得分:0)
经过测试和工作:
#include <stdio.h>
int main(void) {
int i = 0,min ,max,arr[3]={20,40,10};
int *ptr_arr;
ptr_arr=&arr[0];
min = max = arr[0];
for(i=0;i<3;i++){
if(max < ptr_arr[i]) {
max=ptr_arr[i];
}
if(min>ptr_arr[i]){
min=ptr_arr[i];
}
}
printf("The Maximum Number Is %d\n ",max);
printf("The Minimum Number Is %d ",min);
}
<强>输出:强>
最大数量是40
最小数量是10