C 如何使函数返回指针?
此函数应返回一个指针,指向数组中第一个出现的最大整数,而不使用索引运算符。它可以找到并打印最大的int,但是如何使它返回指针呢?我如何测试它是否成功C 如何使函数返回指针?,c,arrays,pointers,C,Arrays,Pointers,此函数应返回一个指针,指向数组中第一个出现的最大整数,而不使用索引运算符。它可以找到并打印最大的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;
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;
}
编辑:应该使用大小,但我不确定如何包含它。我猜不出大小是用来做什么的
int *arr_first_max( int *a, size_t n) {
int *largest = a;
while(*a){
a++;
if(*a>*largest) largest=a;
}
return largest;
}
这很有效。您检测到最大的数字,就像您检测到的一样,然后再次运行相同的循环以查看数字的位置,然后返回该地址。我还将一些数据类型从
int
更改为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);
}
#包括
#包括
常数int*arr\u first\u max(常数int*a){
常数int*k;
int最大=0;
对于(k=a;*k!='\0';k++){
如果(*k>最大值){
最大=*k;
}
}
对于(k=a;*k!='\0';k++){
如果(*k==最大值){
返回k;
}
}
}
int main(){
int nums[6]={7,2,1,5,4,6};
const int*y=arr_first_max(nums);
printf(“%d\n”,*y);
}
在所有函数中,假定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;
}
既然我误读了这个问题,一个递归的奖励
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));
另一个答案假设:
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;
}
假定
- 函数的签名正确且完整(
暗示在数组中搜索第一个max元素)arr\u first\u max
- 因此,
是指向第一个元素的指针(即相当于签名中的int*a
);在这种情况下,我将保留int a[]
说明符,不过我认为如果练习允许,您可以省略/放弃它const
是数组的大小,或者换句话说,是数组中的元素数size\u 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;
}
int*arr\u first\u max(常数int*a,大小n){
int*最大,*k;
对于(最大=k=a;(k-a)*最大)
最大=k;
回报最大;
}
这是因为我引用了C编程语言:
指针减法也有效:如果p
和q
指向
同一个数组,
p将最大值更改为int*
,并在数组中保留一个指针,而不是将值保留在数组中。为什么要将int与char进行比较<代码>*k!='\0'
对于(k=a;*k;k++)它可以像这样
冗余参数size\u t n
不返回
Maximum
是一个局部变量,在函数终止时将从堆栈中释放。因此,它将返回无效或未经授权的内存地址。如果您的数据集包含零,并且最大的元素在此之后已就位,则它将找不到最大的元素。a
以null结尾的假设没有充分的根据。传递size参数是有原因的。我想知道size\u t n
是否是a
数组的大小。以null结尾的int数组看起来很奇怪。也许他要找的是,而(n-)
?在整个数组中继续迭代?谁knows@StoryTeller,我同意你的看法,但那是问题中提到的。我没有idea@milevyoOP说现在他不清楚如何使用n
。因此,在循环中使用它来迭代并停止检查'\0'
。为了得到准确的答案:-)@milevyo,你的答案是脆弱的代码,任何人(更不用说OP)都不应该遵循。不要抓鱼,教他们如何自己钓鱼。你的意思肯定是“空”:@StoryTeller是的:P我最近在基于Java的环境中写了太多东西:/I明白你为什么要进行理智检查,而不是:)我只想补充一件事。因为size\u t
是无符号的(实现已定义,但无符号)。小于零的检查是不必要的。@StoryTeller你也在那里。大小\u t保证为正。我在想什么?刚刚删除了行。根据问题,不允许使用下标运算符。谢谢!更新了答案。
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;
}