我有一個關於func1和主程序的第一段的快速問題。基本上,我不明白a.word--(在func1中)。從結構中的數組中減去
我已經評論過它,a.word的輸出中沒有任何變化,但我不明白爲什麼它不相關。
它將所有值都降低1嗎?或者它只是從最後一個字母到倒數第二個字母,如果是的話,爲什麼當打印a.word時,是否打印出整個「myword」?
我是新來的指針和整個事情。
謝謝!
#include <stdio.h>
struct foo{
int num;
char *word;
struct foo *ptr;
};
void func1(struct foo);
void func2(struct foo*);
void func3(struct foo);
int main() {
struct foo a;
a.num = 5;
a.word = "myword";
func1(a);
printf("1 %d %s\n", a.num, a.word);
a.num = 100;
a.word = "secondword";
func2(&a);
printf("2 %d %s\n", a.num, a.word);
a.ptr = &a;
a.num = 50;
a.word = "mylastword";
func3(a);
printf("4 %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 is %d\n", a.num);
}
void func2(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 is %d\n", (*a).num);
}
void func3(struct foo a)
{
if(a.num > a.ptr->num)
{ a.num = 500; }
else
{ a.num = a.ptr->num + 1; }
a.word = "myotherword";
a.ptr->word = "yetanotherword";
printf("3 %d %s\n", a.num, a.word);
}
如果你不熟悉指針,如果這個程序不是你自己的,那麼你只能在你的問題中提出相關部分,而不是整個程序。反正,在網上查找「指針算術」。很容易,但需要練習才能很好地理解它。許多人在C中發現困難(最初)。 – 2013-04-22 05:46:58
我正在評審即將到來的測試,並希望弄清楚所有的皺紋。就不修改代碼而言,我不想將代碼弄糟,並且無意中將討論變爲無關的缺陷。儘管如此,衷心感謝你的鼓勵。 :) – user2044189 2013-04-22 17:44:53