作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的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; }
最佳答案
*a = *b
简单的意思就是将b
指向的对象的值分配给a
的对象
指向。在本例中,a
指向 word[i]
,b
指向 word[i+1]
,因此 *a = *b
表示您将 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]
和 字[2]
)。第一次调用 flipper
后,word
看起来像这样:"bcadefg"
。
要跟踪代码的进度,只需执行以下操作:
for (i = 0; i < 5; i++)
{
printf( "%d: before flip - \"%s\"", i, word );
flipper(&word[i], &word[i+1], &word[i+2]);
printf( "%d: after flip - \"%s\"", i, word );
}
关于c - 如何使每次迭代的 printf 都能看到 char 数组单词中的值?当 *a=*b (当一个指针等于另一个指针时)又意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36040242/
我是一名优秀的程序员,十分优秀!