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才对。
望高手能解疑。 展开
谁能结合那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才对。
望高手能解疑。 展开
展开全部
因为func1的形参为指向结构体的指针,所以调用时需加&取结构体地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为func1()的参数是个指针,所以要取参数的地址!
输出的区别就是取值和取地址!
输出的区别就是取值和取地址!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf("a = %p\n", &a); 改为printf("a = %d\n", &a);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询