【问题标题】:Printing 1D array using pointer in C在 C 中使用指针打印一维数组
【发布时间】:2022-11-26 19:30:33
【问题描述】:

我想使用指针打印数组的数据,所以我尝试将数组的地址保存在指针中。但是指针不打印数据。稍后我也会打印第二个数组,因此声明了一些额外的变量。

输出:

代码

//print 1D array and 2D array
#include<stdio.h>
#include<stdlib.h>
int Arr1[10];
int Arr2[10][10];
int i, j, n1, n2;
int (*p1)[10];
int (*p2)[10][10];

int main()
{
    printf("For the 1D Array: \n");
    printf("Enter the number of elements you want to add: ");
    scanf("%d", &n1);

    printf("Enter the data for the elements:\n");
    for(i=0;i<n1;i++)
    {
        scanf("%d", &Arr1[i]);
    }
    printf("Displaying Array:\n");
    for(i=0;i<n1;i++)
    {
        printf("%d\t", Arr1[i]);
    }
    
    printf("\nDisplaying using pointer: \n");
    p1=Arr1;
    printf("1D Array is: \n");
    for(i=0;i<n1;i++)
    {
        printf("Arr[%d] is %d\t", i, *(p1[i]));
        printf("\nAddress of %d th array is %u\n", i, p1[i]);
    }

}

【问题讨论】:

  • Arr1是数组的地址! printf("Arr[%d] is %d\t", i, *(Arr1+i))作品

标签: arrays c pointers implicit-conversion pointer-arithmetic


【解决方案1】:

指针p1声明为

int (*p1)[10];

在这个赋值语句中

p1=Arr1;

由于数组指示符隐式转换为指向其类型为int * 的第一个元素的指针,因此指针被分配了int * 类型的表达式。

操作数的指针类型不兼容。所以编译器应该发出一条消息。

你可以写

p1 = &Arr1;
printf("1D Array is: 
");
for(i=0;i<n1;i++)
{
    printf("Arr[%d] is %d	", i, ( *p1 )[i]);
    printf("
Address of %d th array is %p
", i,( void * ) ( *p1 + i));
}

或者你可以写

int *p1;

//...

p1 = Arr1;
printf("1D Array is: 
");
for(i=0;i<n1;i++)
{
    printf("Arr[%d] is %d	", i, p1[i]);
    printf("
Address of %d th array is %p
", i,( void * ) ( p1 + i));
}

我想在 printf 的第二次调用中你想输出数组中每个元素的地址..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多