小编all*_*ted的帖子

指针表达式:*ptr ++,*++ ptr和++*ptr

最近我遇到了这个我自己无法理解的问题.

这三个表达式真正意味着什么?

*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.最后一个请求 - 请给出一些示例,说明每个表达式在给定的代码段中的工作原理.因为大多数时候只有一段理论飞过我的脑海.

c c++ pointers increment

117
推荐指数
4
解决办法
6万
查看次数

使用指针实现strcat

在对字符串做一些程序时,我遇到了这个小问题.向我询问的问题是这样的 - 写一个函数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)

c

2
推荐指数
2
解决办法
6264
查看次数

标签 统计

c ×2

c++ ×1

increment ×1

pointers ×1