如何使每个迭代的printf看到char数组字中的值?还有什么意思当* a = * b(当一个指针等于另一个指针时)?

时间:2016-03-16 15:33:48

标签: c pointers

我的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; }

4 个答案:

答案 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只是地址。