打印出数组不同成员的函数(只允许两个参数)
Function to print out different members of an array (only two parameters are allowed)
问题是创建一个函数,打印出数组的 n 个数字及其地址。函数应该在 main 中被调用 3 次。该函数只能有两个参数。
1.它将打印数组的所有成员
2.它会打印0-4的元素
3. 它将打印元素 3-9
我已经创建了一个函数体,但是我很难遵循只有两个参数的条件。其中之一已用于将数组传递给函数,因此只剩下一个。
#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));
}
}
我唯一能想到的就是再创建两个参数(加上数组)开始和结束变量,每次调用函数时它们都可以不同,但不知何故我只需要保留它两个参数。
像
这样声明函数就够了
void AdressOutput( const int arr[], size_t n );
并称其为
1. AdressOutput( arr, size );
2. AdressOutput( arr, 5 );
3. AdressOutput( arr + 3, size - 3 );
这是一个演示程序
#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;
}
它的输出是
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,
如果使用两个指针作为参数那么函数定义会是这样
void AdressOutput( const int *first, const int *last )
{
for ( ; first != last; ++first )
{
printf( "%p: %d, ", ( const void * )first, *first );
}
putchar( '\n' );
}
函数可以像
那样调用
1. AdressOutput( arr, arr + size );
2. AdressOutput( arr, arr + 5 );
1. AdressOutput( arr + 3, arr + size );
也就是范围指定为[first, last)
传递指向第一个和最后一个元素的指针
void printrange(int *lo, int *hi) {
while (lo <= hi) {
printvalue(*lo);
printaddr(lo);
lo++;
}
}
并根据需要调用
printrange(&arr[0], &arr[9]);
printrange(arr, arr+4);
printrange(arr+3, arr+9);
问题是创建一个函数,打印出数组的 n 个数字及其地址。函数应该在 main 中被调用 3 次。该函数只能有两个参数。 1.它将打印数组的所有成员 2.它会打印0-4的元素 3. 它将打印元素 3-9
我已经创建了一个函数体,但是我很难遵循只有两个参数的条件。其中之一已用于将数组传递给函数,因此只剩下一个。
#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));
}
}
我唯一能想到的就是再创建两个参数(加上数组)开始和结束变量,每次调用函数时它们都可以不同,但不知何故我只需要保留它两个参数。
像
这样声明函数就够了void AdressOutput( const int arr[], size_t n );
并称其为
1. AdressOutput( arr, size );
2. AdressOutput( arr, 5 );
3. AdressOutput( arr + 3, size - 3 );
这是一个演示程序
#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;
}
它的输出是
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,
如果使用两个指针作为参数那么函数定义会是这样
void AdressOutput( const int *first, const int *last )
{
for ( ; first != last; ++first )
{
printf( "%p: %d, ", ( const void * )first, *first );
}
putchar( '\n' );
}
函数可以像
那样调用1. AdressOutput( arr, arr + size );
2. AdressOutput( arr, arr + 5 );
1. AdressOutput( arr + 3, arr + size );
也就是范围指定为[first, last)
传递指向第一个和最后一个元素的指针
void printrange(int *lo, int *hi) {
while (lo <= hi) {
printvalue(*lo);
printaddr(lo);
lo++;
}
}
并根据需要调用
printrange(&arr[0], &arr[9]);
printrange(arr, arr+4);
printrange(arr+3, arr+9);