我的问题是,这段代码是做什么的(来自http://www.joelonsoftware.com/articles/CollegeAdvice.html):
while (*s++ = *t++);
Run Code Online (Sandbox Code Playgroud)
网站说上面的代码复制了一个字符串,但我不明白为什么......
它与指针有关吗?
试图理解C中指针的行为,我对以下内容感到有点惊讶(下面的示例代码):
#include <stdio.h>
void add_one_v1(int *our_var_ptr)
{
*our_var_ptr = *our_var_ptr +1;
}
void add_one_v2(int *our_var_ptr)
{
*our_var_ptr++;
}
int main()
{
int testvar;
testvar = 63;
add_one_v1(&(testvar)); /* Try first version of the function */
printf("%d\n", testvar); /* Prints out 64 */
printf("@ %p\n\n", &(testvar));
testvar = 63;
add_one_v2(&(testvar)); /* Try first version of the function */
printf("%d\n", testvar); /* Prints 63 ? */
printf("@ %p\n", &(testvar)); /* Address remains identical */
}
Run Code Online (Sandbox Code Playgroud)
输出:
64
@ 0xbf84c6b0
63
@ 0xbf84c6b0 …Run Code Online (Sandbox Code Playgroud) int i = 3;
int j = (i)++;
Run Code Online (Sandbox Code Playgroud)
VS
int i = 3;
int j = i ++;
Run Code Online (Sandbox Code Playgroud)
虽然上面两个例子都存储了3个__CODE__,但上述两个案例的评估方式是否存在差异?
既然__CODE__是a __CODE__,那么__CODE__第一种情况是否会被评估为表达式,这相当于递增rvalue?或者它是未定义的行为,只是恰好存储3 __CODE__?
或者我是否过度思考它只是一个简单的后缀?
我无法理解以下C代码的输出:
#include<stdio.h>
main()
{
char * something = "something";
printf("%c", *something++); // s
printf("%c", *something); // o
printf("%c", *++something); // m
printf("%c", *something++); // m
}
Run Code Online (Sandbox Code Playgroud)
请帮忙 :)
我对表达感到困惑*d++=*s++.如何承担它.
int main()
{
char s[20]="hello,world";
char d[20];
char *src=s;
char *des=d;
while(*src) *des++=*src++;
return 0;
}
Run Code Online (Sandbox Code Playgroud)