首页 文章

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

提问于
浏览
2

初学者问题 . 我对指针有点了解但是我在使用函数中的指针尝试打印数组的值时遇到了很多麻烦 . 特别是在这一行: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

    希望这可以帮助 .

    #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++;
        }
      }
    
  • 0

    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

    请尝试以下方法

    #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 );
        }
    
    }
    
  • 0

    问题很少:

    1. void function(int *arr[]); =>在此函数中,您声明了一个指针数组,而不是指向数组的指针 . 请阅读 int (*)arr[]int *arr[] ,它们的不同之处是"( )"和"[ ]"的优先顺序 .

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

    == >>接下来使用指针数组(你正在使用的那个),你需要知道动态内存分配函数,如malloc(),calloc(),realloc()和free() .

    所以我对你的建议首先要阅读一本完全是指针书的书中的指针 . 我最喜欢的是Kenneth A. Reek的"Pointers on C"

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

相关问题