频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
c++函数传递指针的本质与字符串指针与字符数组的区别
2017-09-25 09:35:00         来源:小风code  
收藏   我要投稿

我帮室友看到二级题,突然发现一个坑 记录一下

题的大概意思是,给函数传一个char指针 然后 把字符串末尾的*号去掉
比如 给的字符串是 ******aaa*******
输入******aaa

题中给定的框架是:

void func(char*string)
{
/**  写代码  **/
}
int main()
{
    char str[] = "*****aaaaa****";
    func(str);
    printf("%s",str);
    getchar();
    return 0;
}

答案:

void func(char*string)
{
    while (*string!='\0')
    {
        string++;
    }
    string--;

    while (*string =='*')
    {
        string--;
    }

    *(string+1) = '\0';
    cout <

答案很简单,问题在于,如果把main函数中的 char str[] = "*****aaaaa****"; 换成 char *str ="*****aaaaa****"; 在运行 程序直接奔溃


原因:C 语言中 - 字符串是常量,不可更改的,在func中*(string+1) = '\0';先当与更改一个常量,导致奔溃 - 字符数组显然不是常量,故更改不会导致奔溃。它截取字符串的操作相当于用‘\0’截断了字符串

using namespace std; void func(char*string) { while (*string!='\0') { string++; } string--; while (*string =='*') { string--; } cout <

在main函数中和在func函数中打印出的值为什么不同 传递的是指针哇。 想了几秒钟,突然意识到,函数传递指针只可以改变指针指向的值,并不能改变指针本身!函数传递指针离不开拷贝,只不过传递指针是去拷贝指针(即地址数据),而非拷贝值。

这里写图片描述


同时我有个神奇的想法,如果代码这么写

#include 
点击复制链接 与好友分享!回本站首页
上一篇:C++使用TTrayIcon来制作系统托盘动态图标和气泡提示
下一篇:c++运算符重载,MyString类
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站