字符数组和字符指针

现在在笔试和面试经过了很多这样的考题
但是有时就是没有搞清楚
字符数组和字符指针主要是两个方面的区别:
一个是存储空间,一个是在sizeof方面的区别
而在存储空间也导致了char *p="hello';p[1]='x';的错误

但是
char *test(char *p)
{
    strcpy(p,"hello");
    return p;
}
void main()
{
    char str[]="123456789";
    cout<<test(str)<<endl;
    cout<<str<<endl;
}
这个是可以通过的,因为是传递的指针,指向的字符数组。输出结果是
hello
hello

而改成
char *test(char *p)
{
    strcpy(p,"hello");
    return p;
}
void main()
{
    char *str="123456789";
    cout<<test(str)<<endl;
    cout<<str<<endl;
}
这个却通不过编译,因为字符串常量是之前就存放在静态区的。

但是
char *test(char *p)
{
    p=(char *)malloc(20);
    strcpy(p,"hello");
    return p;
}
void main()
{
    char *str="123456789";
    cout<<test(str)<<endl;
    cout<<str<<endl;//这里有内存泄露,没有考虑
}
是可以运行的,因为这里重新分配内存,但是对传入的没有改变,运行结果
hello
123456789
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值