我的printf
语句不起作用。对于第一次迭代,应该有abcdefg
,根据char数组word
中的代码等,第二次在另一个方向上翻转单词。
printf("first iteration %s\n",word[1]);
printf("second iteration %s\n", word[2]);
printf("second iteration %s\n", word[3]);
printf("second iteration %s\n", word[4]);
代码:
#include <stdio.h>
void flipper(char *a, char *b, char *c) { char val = *a; *a = *b; *b
= *c; *c = val; }
int main() {
char word[] = "abcdefg";
int i; for (i = 0; i < 5; i++) { flipper(&word[i], &word[i+1],
&word[i+2]); }
return 0; }
答案 0 :(得分:1)
*a = *b
只是意味着将b
指向的对象的值分配给a
指向的对象 。在这种情况下,a
指向word[i]
,b
指向word[i+1]
,因此*a = *b
表示您正在指定{{1}的值到word[i+1]
。
让我们首先调用word[i]
。在函数的开头,以下是正确的:
flipper
表达式 Variable Points To Value
-------- --------- -----
val n/a 'a' // val is initialized at declaration
a word[0] 'a'
b word[1] 'b'
c word[2] 'c'
等同于表达式*a
,它的计算结果为字符值word[0]
。
完成所有作业后,我们的变量现在如下所示:
'a'
我们还没有改变指针的值 - 它们仍然指向它们在函数开头所做的相同对象。我们更改的是指向对象(Variable Points To Value
-------- --------- -----
val n/a 'a' // val is initialized at declaration
a word[0] 'b'
b word[1] 'c'
c word[2] 'a'
,word[0]
和word[1]
)的内容。第一次调用word[2]
后,flipper
看起来像这样:word
。
至于跟踪代码中的进度,只需执行以下操作:
"bcadefg"
答案 1 :(得分:0)
*a = *b
是指针解除引用,这意味着您将a
指向的值赋予b
指向的值。
对于问题的其他部分,我想要更多解释,因为我无法理解你在问什么。
答案 2 :(得分:0)
*a = *b;
与a[0] = b[0];
鳍状肢基本上只移动3个值:b-> a,c-> b,a-> c
main()
的目标尚不清楚。
它基本上会在表word
中随机播放字节。
答案 3 :(得分:0)
我没有完全得到您的第一个问题,我认为您希望在每次迭代后打印数组的状态。为此,在printf("%s",word);
之后添加此行flipper(&word[i], &word[i+1], &word[i+2]);
for for循环。
当您编写*a=*b
时,它意味着指针b
指向的值被复制到指针a
所指向的地址。
*a
表示地址处的值,而a
只是地址。