参数*p传递,对p进行++会影响源程序吗

#include "stdafx.h"
#include

void fun(char *p)
{
//printf("%c",p);
while(*p!='E')
{
printf("%c\n",p);
p++;
}

}
int main(int argc, char* argv[])
{
char p[5]={'A','B','C','D','E'};
fun(p);
printf("%c",p);

return 0;

}

为什么这个输出是
@
A
B
C
@
'@'从哪里来的

@ 是非法的,已经出了你的可用内存了;指针已经非法了。什么都可能是;每次出的结果可能不一样。

@是A的ascii码-1(64)

printf("%c",p); 这个错了。

应该是 printf("%c", *p );

你对 char 和 char * 的理解不对,再学习一下指针

 你的程序没法编译,修改下

#include<stdio.h> //这个头文件

void fun(char *p)
{
    //printf("%c",p);
    while(*p!='E')
    {
        printf("%c\n",*p); //修改
        p++;
    }

}
int main(int argc, char* argv[])
{
    char p[5]={'A','B','C','D','E'};
    fun(p);
    printf("%c",*p); //修改


    return 0;
}
结果正确