参数*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
@
'@'从哪里来的

4个回答

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

#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;
}
结果正确

A
B
C
D
A

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

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

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

yanapupa
yanapupa 我太粗心了,蟹蟹
4 年多之前 回复
 你的程序没法编译,修改下

#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;
}
结果正确
yanapupa
yanapupa 诶呀,我也太粗心了,应该是*p,蟹蟹
4 年多之前 回复

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

yanapupa
yanapupa 蟹蟹
4 年多之前 回复

@是A的ascii码-1(64)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐