C - 如何使函数返回指针?

时间:2015-11-29 06:48:16

标签: c arrays pointers

此函数应返回指向数组中第一次出现的最大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应该被使用,但我不确定如何包含它。

5 个答案:

答案 0 :(得分:2)

另一个答案是:

  1. n是数组a的长度(就元素而言,不是字节)
  2. 您希望遍历整个数组a
  3. 然后代码是:

    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编程语言:

  

指针减法也有效:如果pq指向的元素   相同的数组,p<q,然后q-p+1是来自的元素数   pq包含。

答案 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;
}