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

C 如何增加指针值数组的索引?,c,arrays,pointers,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[]); m

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

}
#包括
#包括
空洞函数(int*arr[]);
main()
{
int数组[5];
函数(&数组);
}
无效函数(int*arr[])
{
inti,n;
printf(“有多少元素?”);
scanf(“%d”和“&n”);

for(i=0;i
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));
    }
那就做吧

for(i=0; i<n; i++)
{
    printf("Enter element %d: ", i);
    scanf("%d", &arr[i]);
}
对于(i=0;i请尝试以下操作

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

}
#包括
#定义n5
空洞函数(int-arr[]);
内部主(空)
{
整数数组[N];
函数(数组);
}
无效函数(int-arr[])
{
inti,n;
int*p=arr;
printf(“有多少元素?”);
scanf(“%d”和“&n”);
如果(N
希望这有帮助

#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++;
    }
  }
#包括
#包括
#定义n5
空洞函数(int*);
int main()
{
整数数组[N];
函数(&数组);
返回0;
}
无效函数(int*arr)
{
inti,n;
printf(“有多少元素?”);
scanf(“%d”和“&n”);
fflush(stdin);

如果(n几乎没有问题:
1.
void函数(int*arr[]);
=> 在此函数中,您声明的是指针数组,而不是指向数组的指针。请阅读有关
int(*)arr[]
int*arr[]
,使它们不同的是“()”和“[]”的优先顺序

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

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

所以我给你们的建议是首先从一本完全是指针书的书中读到指针。我最喜欢的是Kenneth a.Reek的“C上的指针”


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

int*arr[]
相当于
int**arr
,一个指向(数组)的指针指针。编译器应该在调用时生成一个警告,因为
&array
的类型是
int*
。您能为我解释一下malloc的用法吗?我在for循环之前输入了这一行,它给了我错误“预期int**,但参数的类型是int(*)[5]”@steeele你真的有很多指针吗?你能不能只使用一个指针,如图所示?是的,这是我课堂练习的一部分。不仅如此,我真的很好奇我做错了什么,这让我很困惑。
#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++;
    }
  }