首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数输出数组的不同成员(只允许两个参数)。

函数输出数组的不同成员(只允许两个参数)。
EN

Stack Overflow用户
提问于 2019-09-16 18:26:57
回答 2查看 254关注 0票数 1

问题是要创建一个函数,输出数组的n个数字及其地址。函数应该被调用3次。函数只能有两个参数。它将打印数组的所有成员。2.它将从0-4打印元素。它将打印元素3-9。

我已经做了一个函数的主体,但我正在努力遵循只有两个参数的条件。其中一个已经用于将数组传递给函数,因此只剩下一个。

代码语言:javascript
复制
#include <stdio.h>
#define size 10

void Input (int arr[]);
void AdressOutput (int arr[]);

int main(void)
{
    int arr[size];
    Input(arr);
    AdressOutput(arr);
return 0;
}
void Input (int arr[])
{
    int i;
    int *p=arr;
    for (i=0;i<size;i++)
    {
        printf ("Please enter a value %d - ",i);
        scanf ("%d",(p+i));
    }
    printf ("\n");

}
void AdressOutput (int arr[])
{
    int i=0;
    int *p=arr;
    for (i=0;i<size;i++)
    {
        printf ("%p,%d\n",(p+i),*(p+i));
    }
}

我唯一能想到的就是创建另外两个参数(加号数组),这些变量在每次调用函数时都可能有所不同,但不知怎么的,我只需要用两个参数来保存它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-16 18:32:16

声明以下函数就足够了

代码语言:javascript
复制
void AdressOutput( const int arr[], size_t n );

把它叫做

代码语言:javascript
复制
1. AdressOutput( arr, size );
2. AdressOutput( arr, 5 );
3. AdressOutput( arr + 3, size - 3 );

这里有一个演示程序

代码语言:javascript
复制
#include <stdio.h>

#define size    10

void AdressOutput( const int arr[], size_t n )
{
    for ( size_t i = 0; i < n; i++ )
    {
        printf( "%p: %d, ", ( const void * )( arr + i ), *( arr + i ) ); 
    }

    putchar( '\n' );
}

int main(void) 
{
    int arr[size] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    AdressOutput( arr, size );
    AdressOutput( arr, 5 );
    AdressOutput( arr + 3, size - 3 );

    return 0;
}

其输出是

代码语言:javascript
复制
0x7ffc1cfd62f0: 0, 0x7ffc1cfd62f4: 1, 0x7ffc1cfd62f8: 2, 0x7ffc1cfd62fc: 3, 0x7ffc1cfd6300: 4, 0x7ffc1cfd6304: 5, 0x7ffc1cfd6308: 6, 0x7ffc1cfd630c: 7, 0x7ffc1cfd6310: 8, 0x7ffc1cfd6314: 9, 
0x7ffc1cfd62f0: 0, 0x7ffc1cfd62f4: 1, 0x7ffc1cfd62f8: 2, 0x7ffc1cfd62fc: 3, 0x7ffc1cfd6300: 4, 
0x7ffc1cfd62fc: 3, 0x7ffc1cfd6300: 4, 0x7ffc1cfd6304: 5, 0x7ffc1cfd6308: 6, 0x7ffc1cfd630c: 7, 0x7ffc1cfd6310: 8, 0x7ffc1cfd6314: 9, 

如果使用两个指针作为参数,则函数定义如下所示

代码语言:javascript
复制
void AdressOutput( const int *first, const int *last )
{
    for ( ; first != last; ++first )
    {
        printf( "%p: %d, ", ( const void * )first, *first ); 
    }

    putchar( '\n' );
}

而这个函数可以调用如下

代码语言:javascript
复制
1. AdressOutput( arr, arr + size );
2. AdressOutput( arr, arr + 5 );
1. AdressOutput( arr + 3, arr + size );

,即范围指定为[first, last)

票数 4
EN

Stack Overflow用户

发布于 2019-09-16 18:34:13

传递指向第一个和最后一个元素的指针。

代码语言:javascript
复制
void printrange(int *lo, int *hi) {
    while (lo <= hi) {
        printvalue(*lo);
        printaddr(lo);
        lo++;
    }
}

然后根据你的需要打电话

代码语言:javascript
复制
printrange(&arr[0], &arr[9]);
printrange(arr, arr+4);
printrange(arr+3, arr+9);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57962516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档