У меня есть быстрый вопрос относительно func1 и первого абзаца основной программы. По сути, я не понимаю a.word-- (в func1).вычитание из массива в структуре
Я прокомментировал это, и ничего из вывода для a.word не изменилось, но я не понимаю, почему это не имеет значения.
Перемещает ли все значения на 1? Или это просто цикл от последнего письма до второго-последнего письма, и если да, то почему, когда печатается слово, выводит ли весь текст «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 (изначально). –
Я просматриваю для предстоящего теста и хочу, чтобы все морщины были сглажены.Поскольку я не изменял код, я не хотел заглушать код и непреднамеренно менять обсуждение на нерелевантные недостатки. Благодарю вас за поддержку, хотя, искренне. :) – user2044189