c语言中数组指针和结构体指针问题

为什么func1(&myFruit);变量前前面要加&啊?谁能结合那4个打印函数说明一下吗?#include<stdio.h>structfruit{intapple;}... 为什么func1(&myFruit);变量前前面要加&啊?
谁能结合那4个打印函数说明一下吗?

#include <stdio.h>

struct fruit
{
int apple;
};

void func1(struct fruit *pF)
{
printf("apple = %d\n", pF->apple);
}

void func2(int *p)
{
printf("*p = %d\n", p[0]);
}

int main(void)
{
fruit myFruit;
int a[2] = {25,32};

myFruit.apple = 25;

printf("myFruit = %d\n", myFruit);
printf("myFruit = %p\n", &myFruit);

printf("a = %d\n", a);
printf("a = %p\n", &a);

func1(&myFruit);

func2(a);

}
首先谢谢各位
个人认为,结构体的名字是一个指针,数组名字也是一个指针,都指向开辟的那块内存的起始地址。
但从现在来看,结构体变量名不是一个指针,就像普通变量int myFruit 一样,编译器把&myFruit编译成确定的一个4字节地址值,每次读取这个变量就直接读这个地址对应的内存单元的值;
我们知道,数组变量的名字是一个指针,编译器开辟一个内存单元,内存单元中保存着实际数据所在的起始地址。下面出现一个问题:
假设指针a的地址是一个固定的4字节值XXXX,程序每次到XXXX这里来读取这个内存单元中的值YYYY,之后把YYYY当作地址来读取真正的数组数据。
这样printf("a = %d\n", a); 的输出结果是一个地址值YYYY,可以被理解;
但是printf("a = %p\n", &a); 的输出结果还是YYYY的值让我不能理解,个人感觉应该输出XXXX才对。
望高手能解疑。
展开
 我来答
pine_wood
2009-05-14
知道小有建树答主
回答量:23
采纳率:0%
帮助的人:31.8万
展开全部
因为func1的形参为指向结构体的指针,所以调用时需加&取结构体地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
十指跳舞的男人
2009-05-14 · TA获得超过250个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:0
展开全部
因为func1()的参数是个指针,所以要取参数的地址!
输出的区别就是取值和取地址!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wuhouzheng
2009-05-15 · TA获得超过8561个赞
知道小有建树答主
回答量:1010
采纳率:100%
帮助的人:1273万
展开全部
printf("a = %p\n", &a); 改为printf("a = %d\n", &a);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式