最近我遇到了这个我自己无法理解的问题.
这三个表达式真正意味着什么?
*ptr++
*++ptr
++*ptr
Run Code Online (Sandbox Code Playgroud)
我试过里奇.但不幸的是,他无法按照他讲述的这三项行动.
我知道它们都是为了递增指针/指向的值而执行的.我还可以猜测可能有很多关于优先级和评估顺序的事情.就像一个指针首先递增指针然后取出指针的内容,一个简单地取出内容然后递增指针等等.正如你所看到的,我对他们的实际操作我没有清楚的理解,我想尽快明确.但是当我有机会将它们应用到程序中时,我真的迷失了.例如:
int main()
{
const char *p = "Hello";
while(*p++)
printf("%c",*p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给我这个输出:
ello
Run Code Online (Sandbox Code Playgroud)
但我的期望是它会印刷Hello
.最后一个请求 - 请给出一些示例,说明每个表达式在给定的代码段中的工作原理.因为大多数时候只有一段理论飞过我的脑海.
在对字符串做一些程序时,我遇到了这个小问题.向我询问的问题是这样的 - 写一个函数strcat(s,t)的指针版本,它将字符串t复制到s的结尾.我写了这个程序 -
#include<stdio.h>
void strcat(char *s, char *t);
int main()
{
char *s1, *s2;
printf("enter the first string\n");
scanf("%s",s1);
printf("Enter the second string\n");
scanf("%s",s2);
strcat(s1,s2);
printf("Strings concatenated\n");
printf("%s",s1);
return 0;
}
void strcat(char *s, char *t)
{
while(*s++)
;
while(*s++ = *t++)
;
}
Run Code Online (Sandbox Code Playgroud)
我知道我做了一些事情(或许多事情)非常错误.因为无论何时我尝试运行此代码 - 它都会给我分段错误.像这样-
输入第一个字符串
你好
输入第二个字符串
分段故障(核心转储)
如果有人指出我实施的缺陷/缺陷,那将是非常有帮助的.提前致谢.
非常感谢你们,以便快速回复.但似乎这不是唯一的问题.写完这样的程序后 -
#include<stdio.h>
void strcat(char *s, char *t);
int main()
{
char s1[20], s2[20];
printf("enter the first string\n");
scanf("%s",s1);
printf("Enter the second string\n");
scanf("%s",s2);
strcat(s1,s2);
printf("Strings …
Run Code Online (Sandbox Code Playgroud)