[英]subtracting from an array in a struct
我对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);
}
该代码显示了按值调用函数或按指针调用函数之间的区别。
void func1(struct foo a) // call by value
在这种情况下,对a
所做的所有更改都将不适用于调用者的输入变量。
void func2(struct foo *a) // call by pointer
这是一样的func1
但在这种情况下,每变化a
将受到影响的a
在主叫方。
struct foo {
int num;
char *word;
struct foo *ptr;
};
这种结构是单向链接列表,每个元素都指向下一个元素。
关于一个a.word--;
您所询问的内容,因为此代码有很多缺陷,逻辑尚不清楚。 我只能说它将减少指向作为char
的内存的指针。
a.word--;
由于aword
是程序中的指针,因此以上语句所做的全部工作是使aword
指向前一个元素,而不是它所指向的当前元素。 这是基本的指针算法,但是由于您说过您是指针的新手,因此我正在“指出”它。
它与减量运算符的不同之处在于,它不仅仅从aword
减去1,还使其指向前一个元素,该元素可能与当前元素相距N个字节。
a.word++;
现在它将是下一个元素的地址/指针。在您的程序中, a.word
用于存储字符串的基址。因此a.word++
将指向字符串的“下一个字符”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.