在循环中打印指针

时间:2013-12-25 21:01:41

标签: pointers printf

我正在尝试打印用户输入的数字,它可以是任何数量,所以我使用了指针。我很难将它们打印出来。 这是我的代码:

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

int main()
{
    int i,n;
    int *elements;
    printf("Enter the number of elements to be sorted\n");
    scanf("%d", &n);
    elements = malloc(sizeof(int)*n);
    for (i=0; i<n; i++)
    {
        scanf("%d", *elements);
    }
    printf("Elements before sorting\n");
    for (i=0; i<n; i++)
    {
        printf("%d \n", *elements);
    }
} 

3 个答案:

答案 0 :(得分:0)

printf("%d \n", elements[i]);

答案 1 :(得分:0)

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

int main()
{
    int i,n;
    int *elements;
    printf("Enter the number of elements to be sorted\n");
    scanf("%d", &n);
    elements = (int*)malloc(sizeof(int)*n); 
    for (i=0; i<n; i++)
    {
        scanf("%d", elements+i); 
    }

        printf("Elements before sorting\n");
        for (i=0; i<n; i++)
        {
            printf("%d \n", *(elements+i)); 
        }
} 
  1. malloc()返回void*指针,您应该将其明确地转换为int*,以便编译器在遍历内存块时知道步长的长度。
  2. scanf()需要一个地址作为补充。这就是您使用&n代替n的原因。但是elements是一个指针,它的值已经是一个地址,所以只需使用elements即可,但不是*elements
  3. 您应该增加elements个循环中的for,否则所有数字都会存储到同一个地址中并逐个替换。

答案 2 :(得分:0)

<强>第一

您必须传递给 scanf 一个要读取的地址。既然你也在迭代,那就改变

scanf("%d", *elements);

scanf("%d", &elements[i]);

<强>第二

打印时请记住您正在迭代值。所以改变

printf("%d \n", *elements);

printf("%d \n", elements[i]);

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

int main()
{
    int i,n;
    int *elements;
    printf("Enter the number of elements to be sorted\n");
    scanf("%d", &n);
    elements = malloc(sizeof(int)*n);
    for (i=0; i<n; i++)
    {
        scanf("%d", &elements[i]);
    }

        printf("Elements before sorting\n");
        for (i=0; i<n; i++)
        {
            printf("%d \n", elements[i]);
        }
}