注册 登录
编程论坛 C++教室

求解一 C++ 问题

黑色humor 发布于 2014-08-10 18:15, 1008 次点击
#include <iostream>
using namespace std;
void main()
{
    void del_ch(char *,char);
    char str[80],ch;
    cout<<"Input a sting:\n";
    cin.getline(str,80,'\n');
    cout<<"Input the char deleted:\n";
    cin>>ch;
    del_ch(str,ch);
    cout<<"Then the new sting is \n";
    cout<<str<<endl;
}
void del_ch(char *p,char ch)
{
    char *q=p;
    for(;*p!='\0';p++)
        if(*p!=ch)
        {*q=*p;q++;}
    *q='\0';
}
为什么被调函数中最后不需要return语句,不然结果怎么出?
13 回复
#2
zklhp2014-08-10 19:29
void 不要求返回值

但主函数用void是不符合规范的 有些编译器上编译不过

至于结果怎么出 这里是用的指针
#3
黑色humor2014-08-11 17:59
回复 2 楼 zklhp
*p没有变化啊,str的值等于*p的值,不等于*q的值,那为什么还能正常出结果呢?
#4
wp2319572014-08-12 15:34
不太懂你在说什么   估计你的函数基本功还需要进一步增强
#5
丽娜132014-08-12 17:38
void 函数是不需要返回值的,指针首地址传入功能函数,指针里的数据就已经改变了,在主函数中直接使用指针数组就行了
#6
a8746951622014-08-12 20:05
数组名实际上是指针,在调用函数时将该指针的值(数组首元素的地址)传递给形参,那么形参就是一个指向主函数中数组的指针,改变了它所指向数组的元素的值就是改变主函数中的数组。因此,被调函数不需要返回值。
你的代码循环处在逻辑方面是有问题的,不能达到删除特定字符的目的,我不告诉你怎么改,请自己思考,应该不难!
要是实在不懂,请加QQ874695162
#7
拟双2014-09-09 17:28
#8
拟双2014-09-09 17:28
#9
richardw2014-09-10 22:15
你的函数内部有赋值操作的,你把指针当作参数传入了函数内,就相当于告诉函数在哪个地方改,函数改了后,在函数外面看,也是改过的结果

就像你告诉了我你家的地址,我去给你家砸了大门(只是举例),不论是从街对面看还是从你家里面看,你的大门都坏掉了
#10
ODmini2014-09-12 22:44
看了你的问题 我感觉我还需要学习很多知识   
#11
rens1112014-09-13 19:52
*p与*q一起指向了字符串str,被调函数中通过*q改变了str的字符,所以不需要返回。已经通过指针改变了str。
#12
rens1112014-09-13 19:52
#13
green_z2014-09-21 20:09
回复 楼主 黑色 humor
在被调用函数中,指针q与指针p指向的都是相同的地址,即同样的字符串,当q指向字符串发生改变时,p指向的字符串也会随之发生变化,那么传进来的指针实参也会随之发生相同的变化,在main函数中,打印的是实参。
#14
七夜之华2014-09-22 13:28
给你推荐本书好好补补基础知识。c++ primer有时间看看你会自然而然明白的,
1