我是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,帮助我如何将数组值作为输出。
答案 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<7
或i<=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())
,所以不需要进行类型转换