C语言高手请指教“指针问题”

来源:百度知道 编辑:UC知道 时间:2024/05/25 01:46:07
#include <stdio.h>

struct card
{
char *face;
char *suit;
};

int main()
{
struct card aCard;
struct card *cardPtr;
char *addface;

aCard.face = "Ace";
aCard.suit = "Spades";

cardPtr = &aCard;
printf("\n\n");
printf("%p\n%p\n%p\n%p",cardPtr->face,cardPtr->suit,*cardPtr,&cardPtr);

return 0;
}
输出结果是:
0194
0198
0194
0198
&cardPtr是不是应该是这个指针变量自己的地址呢?为什么会和cardPtr->suit的地址一样呢?cardPtr->face的地址是不是存储“Ace”的存储区域的地址?取到Ace的流程是不是:通过cardPtr里存的aCard的地址在通过aCard里存的face 的地址再通过face里的地址到达最终存Ace的存储区.
希望给予解答,最好是这里完全的内存分析。谢谢..高分回报..
但是&cardPtr和cardPtr->suit就是一样啊,我调试了很多盘了。而且用printf("%s\n%s",cardPtr->suit,cardPtr);
是输出
Spades
Spades
都被这个东西搅浑了,希望给说清楚点.
分嘛,主要是我现在不多了,以后再提问题,我再加嘛...这次将就了哈..

请你打印时使用下面的语句:
printf("%x\n%x\n%x\n%x",&cardPtr->face,&cardPtr->suit,*cardPtr,&cardPtr);
因为你用cardPtr->face时其实已经在引用"Ace"这个内存中的值了。用&cardPtr->face才是取cardPtr->face这个成员变量在堆栈中的值。

下面回答问题:
1. &cardPtr是不是应该是这个指针变量自己的地址呢?是。
2. 为什么会和cardPtr->suit的地址一样呢?不应该一样。
3. cardPtr->face的地址是不是存储“Ace”的存储区域的地址?不是,cardPtr->face仅是存储"Ace"所在地址,而它的地址在堆栈中。
4. 取到Ace的流程是不是:通过cardPtr里存的aCard的地址在通过aCard里存的face 的地址再通过face里的地址到达最终存Ace的存储区.
你说的是正确的。
还有:15分不算高分吧?

a