如何使用c中的指针和函数打印存储在数组中的值

时间:2018-02-17 17:01:11

标签: c arrays function pointers

我是c中指针的新手,我使用指针完成了以下简单的数组程序。

#include<stdio.h>
void disp(int *);
void show(int a);

int main()
{
    int i;
    int marks[]={55,65,75,56,78,78,90};
    for(i=0;i<7;i++)
        disp(&marks[i]);
    return 0;
}
void disp(int *n)
{
    show((int) &n);
}
void show(int a)
{
    printf("%d",*(&a));
}

我希望将存储在数组中的所有这些值作为输出,但我只获取数组中这些存储值的内存编号。 plz,帮助我如何将数组值作为输出。

4 个答案:

答案 0 :(得分:1)

我想你想玩指针。

请注意,void show(int a)期望值int。 因此,您无需对a执行任何操作即可进行打印。   *(&a)相当于a&a获取a的地址,*取消引用指针。

当然,进入disp(int *n)的指针可能会在路上传递并在以后解除引用。这是通过在show1内调用disp函数来说明的。

#include <stdio.h>
#include <string.h>

void disp(int *);  //  function disp receives the address on int value 

void show(int a);
void show1(int *a); // function show1 will receive the address of n

int main()
{
    int i;
    int marks[]={55,65,75,56,78,78,90};

    for(i=0;i<7;i++)  // 7 since you want to print all elements

        disp( &marks[i] );

    return 0;
}

void disp(int *n)
{
    show(*n); // show expects the 'int' value therefore we have to dereference the pointer. 
    show1(n); // function show1 will receive the address of n and will dereference the pointer inside the function
}

void show(int a)
{
    printf("%d ",a);
}

void show1(int *n) // show1 gives the output of the value that is stored in address n
{
    printf("%d\n",*n);  // dereference the address n to print the value
}

输出:

55 55
65 65
75 75
56 56
78 78
78 78
90 90

答案 1 :(得分:0)

&总是为您提供变量的内存地址。因此&n为您提供变量n的内存地址。

如果您想要指针的值,请使用*。要获取指针n存储的值,您需要使用(int)*n。当然,你根本不需要演员,只需要*n

我建议在C / C ++指针基础知识中学习一些教程。指针是您希望拥有坚实基础的基本技能。

答案 2 :(得分:0)

如果您只想打印该阵列的所有元素,则只需要

for(i=0;i<7;i++)
    printf("%d", marks[i]))

请注意,marks中有7个元素,循环中的退出条件应为i<7i<=6而不是i<6

您要将变量的地址作为disp()发送到函数n

n中的disp()的行为类似于该函数的局部变量,只不过它从调用它的函数中获取它的值。

所以n存储在内存中的某个地方,因此有一个地址。这个地址是你&n时得到的地址。 所以你看到的内容可能毫无意义(因为它们是在stack memory上分配的。)

您使用int在此地址上对(int) &n进行显式类型广播,然后将其值传递给show()。阅读有关显式类型转换here的信息。

show()中,您首先使用a&a的地址,然后使用*(&a)找到该地址中的值,该值与{{1}相同(沿着 - ( - a)的方向思考,即取消一个数字的负数,而这个数字的负数又与你开始时的数字相同)。

答案 3 :(得分:0)

&安培; - &GT;把我的地址告诉我。

* - &GT;告诉我该地址的价值

DISP(安培;马克[I]) - &GT;得到变量的地址&#34;标记[i]&#34;并将其传递给* n(disp(int * n)),这样当执行* n时,它将获得已分配地址的值。

show((int)&amp; n) - &gt;获取存储变量mark [i]的地址的变量的地址。

为了使其按预期工作,必须显示(* n) - &gt;传递n指向的地址的值。 (因为你将int值传递给show())

,所以不需要进行类型转换