面试系列指针与数组

#include <stdio.h>

int main(void)
{
    char *p = "abcd";
    p[1] = 'w';
    printf(p);

    return 0;
}

编译通过,但是运行时会出现段错误

#include <stdio.h>

int main(void)
{
    char str[] = "abcd";
    str[1] = 'w';
    printf(str);

    return 0;
}


编译通过,运行也很正常。

解释:

字符串 abcd 存放在常量区,它只是可读的,不可修改,而指针变量p和数组str都是存放在栈区。

第一个程序声明的指针,指向的数据类型为char,而并没有给这个指针动态开辟一块内存区,

char *p = "abcd";这条语句的动作只是让指针指向存放abcd字符串的常量区,所以,不能修改。而第二个程序声明可一个数组,同样它也是在栈区上的,但是,声明了这个数组后在函数的栈区开辟一个内存区域,同时,将这个内存区用abcd字符串填充。所以,它是可以修改的。
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值