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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彈指っ紅顏老 中级黑马   /  2014-11-23 17:17  /  814 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. #include <stdio.h>

  2. typedef struct
  3. {
  4.     int age;
  5.     char *name;
  6. } Student;

  7. typedef Student * StuP;

  8. void test();

  9. int main()
  10. {
  11.     Student mystu = {20, "jack"};
  12.    
  13.     test(&mystu);
  14.    
  15.     printf("%d-%s\n", mystu.age, mystu.name);
  16.    
  17.     return 0;
  18. }

  19. void test(StuP stu)
  20. {
  21.     stu->age += 10;
  22.     stu->name = "rose";
  23. }
复制代码

在结构体里用指针定义了一个字符串,可是用指针指向的字符串不是不能修改吗?这个字符串不是常量吗?莫非用别的指针访问就可以修改了?求指教求科普求解答啊!

评分

参与人数 1黑马币 +1 收起 理由
星河鹭起 + 1

查看全部评分

7 个回复

倒序浏览
用指针指向的字符串可以修改,这个字符串不是常量
回复 使用道具 举报
在定义指针变量时,需要用指针声明符“*”表示此变量并非一般变量,而是用来存放其他变量地址的指针变量。
回复 使用道具 举报
字符串不能被修改不表示这个指针不能指向别的字符串
回复 使用道具 举报
从今以后 发表于 2014-11-23 19:24
字符串不能被修改不表示这个指针不能指向别的字符串

那怎样体现出是修改指向的字符串还是指向了别的字符串呢?
回复 使用道具 举报
孔思哲 发表于 2014-11-23 18:39
用指针指向的字符串可以修改,这个字符串不是常量

视频里老师讲说指针指向的字符串是常量,区别于数组表示的字符串啊
回复 使用道具 举报
彈指っ紅顏老 发表于 2014-11-24 00:12
那怎样体现出是修改指向的字符串还是指向了别的字符串呢?

比如把“jack”,想修改单个字符,增加或者减少字符,都是不可以的,“jack”是一个整体,是个字符串常量,无法改变,指针指向了它的首地址,但是指针完全可以不再指向它,而去指向别的字符串,就像这个“rose”;
数组存字符串,char ch[] = "jack"; “jack”不是一个整体常量,而是‘j’‘a’‘c’‘k’‘\0’这五个字符存储的,自然可以相应修改,只是输出时按顺序全部输出,看起来就像一个整体一样。
另外还有这样的:先char ch[] = "jack"; 再char *name = ch;把数组的首地址(也就是首元素地址),赋给指针name保存,这时指针name,指向的并不是一个字符串常量,而是‘j’这个字符的地址,此时就可以通过类似指针name++操作去指向每一个字符,并可完成修改。
回复 使用道具 举报
从今以后 发表于 2014-11-24 10:16
比如把“jack”,想修改单个字符,增加或者减少字符,都是不可以的,“jack”是一个整体,是个字符串常量 ...

厉害~明白了!非常感谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马