A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© oucding 中级黑马   /  2015-3-22 15:40  /  942 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include<stdio.h>

int main(){
       
        char *name = "Jack";
        name[3] = 'h';
        printf("%s\n",name);
}
为啥这个程序不能运行呢,我断点调试的时候 蹦到 name[3] = 'h'; 这一句就崩溃了,为啥呢?指针没学好,愁死了,哪位大侠给指点指点。

13 个回复

倒序浏览

int main(){
    //定义一个指向字符的指针并用字符串常量(表示的是指针常量)初始化。
    char *name = "Jack";
    //字符串常量不能改变
    //name[3] ='h';
    printf("%s\n",name);
    return 0;
}
回复 使用道具 举报
因为指针指向的是常量地址,常量无法修改
改成数组
char name [4] = "Jack";
就好了
回复 使用道具 举报
注意哦字符串常量是不能改变的,如果你想改变一个字符串,可以用字符数组进行保存字符串。比如上面 改成 char  name[]='"jack",就可以运行你下面的代码了
回复 使用道具 举报
一步一个脚印 发表于 2015-3-22 15:53
int main(){
    //定义一个指向字符的指针并用字符串常量(表示的是指针常量)初始化。
    char *name = ...

感谢,现在知道了
回复 使用道具 举报
原来如此。。。。
回复 使用道具 举报
学知识了,好多细节性问题都是不太注意啊!加油楼主!
回复 使用道具 举报
用 char *name 定义的字符串是不可改变的    用char name[3] 是可以改变的  这个问题老师课堂上面讲过了啊
回复 使用道具 举报
用指针定义的字符 , 会分配 到 字符串常量中去 ,是不可改变的  。  
这个课件上有  。
/*
1.常量区
存放一些常量字符串
2.堆
对象
3 栈
局部变量


掌握:
1,利用数组

char name[] = {}="";

字符串里面的字符是可以修改的
经常修改

2.利用指针

char *name =" ";
字符串里面的字符其实是一个常量字符串,里面的字符是不能修改

字符串经常使用

*/


#include <stdio.h>

int main()
{
    char *names[5]={"jace","jack","rose"};   //   *name[]=&name[]  []= name[]
   
    //char names2[2][10] = {"jace","jack","rose"};
   
    printf("%s\n",names[0]);
    printf("%c\n",*names[0]);   //  此时   是以 name[0] 再为 一个字符串。

    char name[20];
   
    printf("请输入姓名:\n");
   
    scanf("%s",name );
   
    printf("%c\n",name[3]);
    //printf("刚才输入的字符串是:%s\n",name);
   
   
    return 0;
}

//字符串数组  。


void test2(){
    //char *name = "jack";
   
    //char *name2= "rose";
    //整型数组  , 指针数组
    //int ages[5];
   
    //指针数组(字符串数组)
    char *names[5]={"jace","jack","rose"};   //   *name[]=&name[]  []= name[]
   
    //char names2[2][10] = {"jace","jack","rose"};
   
    printf("%s\n",names[0]);
    printf("%c\n",*names[0]);}
void test()
{
    //字符串变量
    char name[] = "itcast";//栈  ,  局部变量  ,可以随时改
   
    name[0]= 'T';
   
    printf("%s\n",name);//字符串输出
    // "it"='i'+'t'+'\0'
    //指针变量name2指向了字符串的首字符
   
   
    //字符串常量
   
    char *name2 = "it";//char *name=name    。   常量 区  ,  不可随意更改。
   
    char *name3 = "it";
   
    // *name2 = 'T';//系统崩溃
   
    printf("%p\n%p\n",name2,name3);
   
    printf("%c\n",*name2);
    printf("%s\n",name2);  // 字符串 输出
}
回复 使用道具 举报
学习了,非常感谢
回复 使用道具 举报
wzboy 中级黑马 2015-3-23 14:19:54
11#
这个问题视频上有讲的。
回复 使用道具 举报
我还没懂
回复 使用道具 举报
Ammar 中级黑马 2015-3-23 17:06:01
13#
指针定义的字符串 是字符串常量 无法更改的
回复 使用道具 举报
水的精致
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马