如何增加指针值数组的索引?

时间:2014-12-09 05:41:01

标签: c arrays pointers

初学者问题。我对指针有点了解但是我在使用函数中的指针尝试打印数组的值时遇到了很多麻烦。 特别是在这一行:printf(" \ n%d \ t \ t%d \ t0x%X",i + 1,*(arr + i),arr);我的输出是一个表格,显示输入计数,用户输入的值以及存储的地址。地址看起来很好,但值打印垃圾。当我尝试使用索引i ??

递增指针数组时,我认为语法*(arr + i)是正确的
#include<stdio.h>
#include <stdlib.h>


void function(int *arr[]);
main()
{
    int array[5];
    function(&array);
}


void function(int *arr[])
{
    int i, n;
    printf("How many elements? ");
    scanf("%d", &n);

    for(i=0; i<n; i++)
    {
        printf("Enter element %d: ", i);
        scanf("%d", arr);
        arr++;
    }

    printf("\nInput\t\tValue\tAddress");
    for(i=0; i<n; i++)
    {
    printf("\n%d\t\t%d\t0x%X", i+1, *(arr+i) , arr);
    arr++;
    }

}

4 个答案:

答案 0 :(得分:1)

int *arr[]是一个指针数组。

在向他们写点东西之前,你需要为这些指针分配内存。就像

一样
arr[0] = malloc(sizeof(int));

所以你的代码应该是这样的:

    a[0] = malloc(sizeof(int) *n);
    for(i=0;i<n;i++)
    {
       scanf("%d",(a+i));
       printf("%d\n",*(a+i));
    }

在您的代码中,您似乎只是在为数组读取值并打印它们。你可以使用

int *arr = malloc(sizeof(int) *n);

然后做

for(i=0; i<n; i++)
{
    printf("Enter element %d: ", i);
    scanf("%d", &arr[i]);
}

答案 1 :(得分:0)

尝试以下

#include<stdio.h>

#define N 5

void function( int arr[] );

int main( void )
{
    int array[N];

    function( array );
}


void function( int arr[] )
{
    int i, n;
    int *p = arr;

    printf( "How many elements? " );
    scanf( "%d", &n );

    if ( N < n ) n = N;

    for ( i = 0; i < n; i++ )
    {
        printf( "Enter element %d: ", i );
        scanf( "%d", p++ );
    }

    printf( "\nInput\t\tValue\tAddress" );
    for ( i = 0; i < n; i++ )
    {
        printf( "\n%d\t\t%d\t%p", i+1, *( arr + i ) , arr + i );
    }

}

答案 2 :(得分:0)

希望这有帮助。

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

  #define N 5
  void function(int *);
  int main()
  {
     int array[N];
     function(&array);
     return 0;
  }


  void function(int *arr)
  {
      int i, n;
       printf("How many elements? ");
       scanf("%d", &n);
       fflush(stdin);

       if (n<=N) {
       for(i=0; i<n; i++)
       {
         printf("Enter element %d: ", i);
         scanf("%d", arr);
         fflush(stdin);
         arr++;
       }

    printf("\nInput\t\tValue\tAddress");
    for(i=0; i<n; i++)
    {
      printf("\n%d\t\t%d\t0x%X", i+1, *(arr+i) , arr);
      arr++;
    }
  }

答案 3 :(得分:0)

问题很少:
 1. void function(int *arr[]); =&gt; 在此函数中,您将声明一个指针数组,而不是指向数组的指针。请阅读int (*)arr[]int *arr[],它们的不同之处是&#34;()&#34;的优先顺序。和&#34; []&#34;。

 2.如果你定义一个像int arr[5];这样的数组然后传递数组的基地址你必须像function(arr)那样传递它,所以如果你调用像function(&arr)这样的函数那么它就不会感。声明数组int arr[5](比如说​​)时,arr始终表示该数组的基址。

==&GT;&GT;接下来使用指针数组(您正在使用的指针),您需要了解动态内存分配函数,如malloc(),calloc(),realloc()和free()。​​

所以我给你的建议首先是关于一本完全是指针书的书的指针。我最喜欢的是&#34;指针在C&#34;作者:Kenneth A. Reek

不要依赖网站来学习基础知识,买一本好书。使用StackOverflow作为资源来解决严重问题。

相关问题