使用* only *指针打印数组

时间:2016-04-14 07:01:04

标签: c arrays pointers

我被要求编写一个函数,在x元素之后打印数组的内容(如x中所示,因为x是指向内部的指针数组)。我不允许将[]用于初始化之外的任何事情,并且不允许在函数内部创建变量 - 我可能只使用函数从main接收的内容,即长度(int n) ,数组(int* arr)和元素xint* x)。

我的问题是如何只使用没有循环索引的指针在数组中打印x和更早?

这是我写的:

void printAfterX(int* arr, int n, int* x)
{
    if ((arr <= x) && (x < arr + n))
    {
        while(x < (arr + n))
        {
            printf("%8d", *(arr+x));        //I know you can't do this
            x++;
        }
    }
}

为此:

    int arr[] = { 0,5,6,7,8,4,3,6,1,2 };
    int n=10;
    int* x = (arr+3);

    printAfterX(arr, n, x);

输出应为:

7 8 4 3 6 1 2

编辑:谢谢你们的帮助!工作得很好。 :)

3 个答案:

答案 0 :(得分:2)

void printAfterX(int* arr, int n, int* x)
{
    arr += n;               // make arr to point past the last element of the array
    for( ; x < arr; x++)    // walk till the end of array
        printf("%8d", *x);  // print the current item
}

示例https://ideone.com/Ea3ceT

答案 1 :(得分:0)

你想要这个:

#include <stdio.h>
#include <stdlib.h>

void printAfterX(int* arr, int n, int* x)
{
  while(x < (arr + n))
  {
      printf("%d ", *x);
      x++;
  }
}

int main()
{
  int arr[] = { 0,5,6,7,8,4,3,6,1,2 };
  int n = 10;
  int *x = (arr+3);

  printAfterX(arr, n, x);
  return 0;
}

答案 2 :(得分:-1)

为此更改printf行:

printf("%8d", *x);