我在这里有这个代码,它给了我编译器错误,我知道这里有几十个其他问题,基本上完全相同;我阅读了其中的很多内容,并没有回答所有的问题。过去几天我在堆栈和教学网站上阅读了很多关于指针和结构的知识,还有几十个,我觉得我只需要在我面前解释和解释一个物理示例。我觉得我对这些东西大部分都了解,但是我比我更愿意对自己更加不确定。如果有人能帮助我理解发生了什么。我已经在下面发布了一个编号列表,告诉你我在想什么,并且希望我对大多数人都适合,而不是为了解释你需要做哈哈而开玩笑。那么这里是代码。'unary *'的无效类型参数(有'int')。基本上我遇到了指针和结构的逻辑问题
struct foo{
int num;
char *word;
struct foo *ptr;
};
void func1(struct foo*);
void func2(struct foo);
int main() {
struct foo a;
a.num = 20;
a.word = "wordOne";
func1(&a);
printf("%d %s", a.num, a.word); // refer to #3 below.
a.ptr = &a;
a.num = 55;
a.word = "thirdToLastWord";
func2(a);
printf("%d %s\n", a.num, a.word);
}
void func1(struct foo *a)
{
while(*(a->word) != '\0')
{
putchar(*(a->word));
a->word++;
}
putchar('\n');
if(a->num % 10 != 0)
{ a->num *= 2; }
a->word--;
printf("num equals %d\n", (*a).num);
}
void func2(struct foo a)
{
if((*a).num == a->ptr->num) //compiler error
{(*a).num = (*((*a).ptr)).num +1; } //compiler error
else { a->num = 200; }
a->word = "wordsix";
a->ptr->word = "wordseven";
printf("function 2 %d %s\n", (*a).num, (*((*a).ptr)).word);}
}
好的。所以我想我明白了第一个功能。但是,如果我错了,请纠正我下面的任何错误,或者我对错误地理解为什么错在哪里。
1)在主func1声明struct“foo”作为指针之前。当调用func1时,我们传入“a”的地址,以便知道指向哪个地址。 2)func1中的所有内容都会改变原始结构。这个词被递减,只在func1以外打印出来时才显示最后一个字母“e”。
3)就行了我评论#3所打印出的原始结构Foo的.num没有指针的版本(即使它们是相同的东西)。
我希望我到目前为止还没有搞砸。
4)Ok a.ptr = & a将struct var“struct foo * ptr”设置为与原始foo结构相等的地址;这恰好是指针“struct foo * ptr”发现自己的确切结构。对吧?
5)我们指的是他作为(主/原结构)的成员,他已经被确立为主指针。
6)那么这是否会在由内部指针连接在一起的结构中构造无限循环的结构?
我在哪里评论编译器错误是我积极的地方我有问题。
7)首先,设置a.ptr =&a后;我们传递一个struct的初始化指针“ptr”到函数func2中,是吗?
8)在第一个if语句中,它看起来像我们正在比较a-> word到a-> ptr-> num。我假设的意思是说:IF {属于“a”指向的结构的成员“词”等于成员“num”,属于指针“ptr”指向的结构,“ptr是再次被指向指针“一”}这似乎是正确的,但我不认为这是....
9)如果是真的,那么下面的一行说添加了+1同样的事情
10)我想最终打印出来的最终printf在打开func2之前打印出了什么数字和字,或者func2中的一些指针是否改变了它们的值。
我将不胜感激您的意见和建议,我应该如何处理这个指针& &结构ptr-> member和/或structure.member在我脑海中的东西。
此外,我不确定这是否出现在我的问题,但我也很颤抖双指针以及。如果有人能告诉我一个双指针如何将自己整合到我的代码中,那么不会有太多麻烦?
谢谢