2 yanapupa yanapupa 于 2016.05.05 23:00 提问

参数*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个回答

caozhy
caozhy   Ds   Rxr 2016.05.05 23:30
已采纳
 你的程序没法编译,修改下

#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
caozhy
caozhy   Ds   Rxr 2016.05.05 23:30
 你的程序没法编译,修改下

#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,蟹蟹
一年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.05.05 23:25

@是A的ascii码-1(64)

balary
balary   2016.05.05 23:28

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

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

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

yanapupa
yanapupa 我太粗心了,蟹蟹
一年多之前 回复
q610098308
q610098308   2016.05.05 23:23

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

yanapupa
yanapupa 蟹蟹
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!