将指针作为参数传递并在C ++中返回指针时的差异

时间:2016-12-18 17:00:16

标签: c++ string pointers

这是我的程序的工作方式:promt用户输入一个字符串,使用compress_string()函数将字符串作为参数传递。使用临时队列从字符串中获取所有非空格字符,然后将它们放回字符串。最后一个字符串根本没有空格。

#include <iostream>
#include "Queue.h"
#include <cstring>
using namespace std;

char* compress_string(char *s){
    Queue q;
    int cnt=0;
    char tmp;
    for(int i=0; i<strlen(s); i++){
        if(s[i] != ' '){
            q.enQueue(s[i]);
            cnt++;
        }
    }
    delete[] s;
    s = new char[cnt+1];
    for(int i=0; i<cnt; i++){
        q.deQueue(tmp);
        s[i] = tmp;
    }
    s[cnt] = '\0';
    return s;
}

int main(){
    char *s = new char[20];
    cin.getline(s, 20);
    s = compress_string(s);
    cout << s;
    return 0;
}

这是问题:只有当我返回一个指针然后将其分配给输入指针时它才有效:

s = compress_string(s);

如果我将compress_string()设为void函数,这也意味着不从它返回任何内容,并在main函数中修改如下:

compress_string(s);

输出现在都是无意义的字符。

我想当我将* s传递给compress_string()函数时,它已经是一个指针,所以它在退出函数后会生效。那么一切都出错了? 谢谢大家。

0 个答案:

没有答案