我在這裏有這個代碼,它給了我編譯器錯誤,我知道這裏有幾十個其他問題,基本上完全相同;我閱讀了其中的很多內容,並沒有回答所有的問題。過去幾天我在堆棧和教學網站上閱讀了很多關於指針和結構的知識,還有幾十個,我覺得我只需要在我面前解釋和解釋一個物理示例。我覺得我對這些東西大部分都瞭解,但是我比我更願意對自己更加不確定。如果有人能幫助我理解發生了什麼。我已經在下面發佈了一個編號列表,告訴你我在想什麼,並且希望我對大多數人都適合,而不是爲了解釋你需要做哈哈而開玩笑。那麼這裏是代碼。'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在我腦海中的東西。
此外,我不確定這是否出現在我的問題,但我也很顫抖雙指針以及。如果有人能告訴我一個雙指針如何將自己整合到我的代碼中,那麼不會有太多麻煩?
謝謝