此函数应返回指向数组中第一次出现的最大int的指针,而不使用索引运算符。它可以找到并打印最大的int,但是如何让它返回一个指针?我如何测试它是否成功?
int *arr_first_max(const int *a, size_t n) {
const int *k;
int largest = 0;
for (k = a; *k != '\0'; k++) {
if (*k > largest) {
largest = *k;
}
}
printf("%d\n", largest);
return &largest;
}
编辑:size_t n应该被使用,但我不确定如何包含它。
答案 0 :(得分:2)
另一个答案是:
n
是数组a
的长度(就元素而言,不是字节)a
然后代码是:
const int *arr_first_max(const int *a, size_t n) {
const int *largest = a;
while(n--) {
if(*a>*largest)
largest = a;
a++;
}
printf("%d\n", *largest);
return largest;
}
答案 1 :(得分:1)
在所有函数中,n
被假定为>0
。
保持逻辑,但不是存储max,而是将索引存储到max,以便返回指向该索引处数组的指针。
int *arr_first_max(const int *a, size_t n) {
int i,l;
for (l=i=0 ; i<n ; i++)
if (a[i] > a[l]) l = i;
return a+l;
}
修改仅指针版本(基于评论)执行n-1
次迭代
const int *arr_first_max(const int *a, size_t n) {
const int *most;
for (most=a++ ; --n ; a++) if (*a > *most) most = a;
return most;
}
因为我误读了这个问题,一个递归奖金!
const int *arr_first_max_r(const int *most, const int *a, size_t n) {
if (*a > *most) most = a;
return --n ? arr_first_max_r(most, ++a, n) : most;
}
像这样被调用
printf("Biggest int is : %d\n", *arr_first_max_r(a, a, n));
答案 2 :(得分:0)
这很有效。您检测到的数字最大,然后再次运行相同的循环以查看数字的位置然后返回该地址。我还将一些数据类型从const int
更改为#include <stdio.h>
#include <stdlib.h>
const int *arr_first_max(const int *a) {
const int *k;
int largest=0;
for (k = a; *k != '\0'; k++) {
if (*k > largest){
largest = *k;
}
}
for (k = a; *k != '\0'; k++) {
if (*k == largest){
return k;
}
}
}
int main(){
int nums[6]={7,2,1,5,4,6};
const int* y=arr_first_max(nums);
printf("%d\n", *y);
}
,我删除了第二个参数,因为您正在检查空字符。
---
title: Test page
permalink: /test/
---
Test page
{% for block in site.blocks %}
{% if block.whatever %}
{{ block.content }}
{% endif %}
{% endfor %}
答案 3 :(得分:0)
假设
arr_first_max
暗示您在数组中搜索第一个最大元素)int* a
是指向第一个元素的指针(即等同于签名中的int a[]
);在这种情况下,我会留下const
说明符,但如果练习允许,我认为你可以省略/放弃 size_t n
是数组的大小,换句话说,就是数组中元素的数量[]
运算符那么这将是一个解决方案
int *arr_first_max(const int *a, size_t n) {
int *largest, *k;
for (largest = k = a; (k - a) < n; k++)
if (*k > *largest)
largest = k;
return largest;
}
这是因为我引用了C编程语言:
指针减法也有效:如果
p
和q
指向的元素 相同的数组,p<q
,然后q-p+1
是来自的元素数p
至q
包含。
答案 4 :(得分:-1)
我不会猜到size_t n
是什么
int *arr_first_max( int *a, size_t n) {
int *largest = a;
while(*a){
a++;
if(*a>*largest) largest=a;
}
return largest;
}