注册 登录
编程论坛 C语言论坛

小白初学,不懂这串指针代码的输出为什么这样

sleepyyuy 发布于 2021-02-12 13:40, 1682 次点击
输出居然是4432
程序代码:
#include<stdio.h>

int main()
{
  char s[]="1234",*p;
  p=s;
  printf("%c%c%c%c\n",*p,*++p,*++p,*++p);      
}
5 回复
#2
rjsp2021-02-12 14:28
未定义行为。
因为函数参数的求值顺序是未定的,且修改了同一个变量。
#3
sleepyyuy2021-02-12 16:23
回复 2楼 rjsp
get√到一个新知识
#4
sleepyyuy2021-02-13 16:25
回复 2楼 rjsp
大佬这串代码是怎么输出的,奇奇怪怪的。输出的是1711717
程序代码:

#include<stdio.h>
#include<string.h>
void fun(char *p,int n);

int main()
{
  static char s[]="1234567";
  fun(s,strlen(s));   
  puts(s);
  return 0;
}
void fun(char *p,int n)
{
  char k,*p1,*p2;
  p1=p;     
  p2=p+n-1;   
  while(p1<p2)
  {
    k=*p1++;
    *p1=*p2--;
    *p2=k;
   
  }
}
#5
rjsp2021-02-13 21:54
k=*p1++;
    *p1=*p2--;
    *p2=k;

我猜你想要的是
    k=*p1;
    *p1=*p2;
    *p2=k;
    ++p1, --p2;
#6
sleepyyuy2021-02-14 00:18
回复 5楼 rjsp
确实是这样
1