注册 登录
查看: 3176|回复: 241

【每日一题讲解】指针常见错误的用法

  [复制链接]
发表于 2013-12-1 12:58:00 | 显示全部楼层 |阅读模式
  1. char *p="abcde";
  2. p[1]='m';
  3. printf("%s",p);
  4. //打印结果是多少?

  5. //A.abcde
  6. //B.mbcde
  7. //C.amcde
  8. //D.运行异常


请回答问题后再看答案哦,否则 每日一题 就没有意义了。
答错的,讲一下 为什么 会答错 呗!
答案回复可见!!


这题难度不大,不过很多初学者 容易做错


游客,如果您要查看本帖隐藏内容请回复


本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2013-12-1 13:07:06 | 显示全部楼层
等了一天 错了...我以为是c..
回复 支持 反对

使用道具 举报

发表于 2013-12-1 14:09:52 | 显示全部楼层
ewew43 发表于 2013-12-1 13:07
等了一天 错了...我以为是c..

这几天都比较忙
回复 支持 反对

使用道具 举报

发表于 2013-12-1 16:04:57 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-12-1 16:09:30 | 显示全部楼层
真心不会做!!
回复 支持 反对

使用道具 举报

发表于 2013-12-1 18:36:16 | 显示全部楼层
本帖最后由 飞鸿印雪 于 2013-12-1 19:09 编辑

在我的印象中 *(P+x)和 p[x]是等价的      这个竟不可以   额 那要怎么 实现 修改这个字符串中的某个字母呢
回复 支持 反对

使用道具 举报

发表于 2013-12-1 19:05:14 | 显示全部楼层
选C,错了。。。
回复 支持 反对

使用道具 举报

发表于 2013-12-1 19:08:54 | 显示全部楼层
虽然看了解说,但还是不明白。。。
01.char *p="abcde";

02.p[1]='m';
char *p="mbcde";
这样是对的吧?
03.printf("%s",p);

这个里面的P是指什么?指针还是数组?

回复 支持 反对

使用道具 举报

发表于 2013-12-1 19:36:34 | 显示全部楼层
过来瞧瞧
回复 支持 反对

使用道具 举报

发表于 2013-12-1 19:48:00 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-12-1 19:59:40 | 显示全部楼层
B果断又错了
回复 支持 反对

使用道具 举报

发表于 2013-12-1 20:08:47 | 显示全部楼层
sn516952 发表于 2013-12-1 19:08
虽然看了解说,但还是不明白。。。
01.char *p="abcde";

第一步 的 p 的定义,可以明显看到 p 是指针,而不是数组。

但 指针 可以用 数组的方式 来 修改指针所指向的内容。

不过 p 指针 指向 常量字符串,常量字符串是 不可修改的,也就是说,修改 常量 会 异常
回复 支持 反对

使用道具 举报

发表于 2013-12-1 21:18:07 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-12-1 21:50:49 | 显示全部楼层
对了看答案了嘻嘻嘻
回复 支持 反对

使用道具 举报

发表于 2013-12-1 21:54:07 | 显示全部楼层
不过 p 指针 指向 常量字符串,常量字符串是 不可修改的,也就是说,修改 常量 会 异常
嘻嘻嘻真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-12-1 21:55:46 | 显示全部楼层
STC89C52 发表于 2013-12-1 21:54
不过 p 指针 指向 常量字符串,常量字符串是 不可修改的,也就是说,修改 常量 会 异常
嘻嘻嘻真棒!!非常 ...

追问,山外哥那个想用指针改变一个字符串里的其中一个字母的话怎么办呢?
回复 支持 反对

使用道具 举报

发表于 2013-12-1 22:10:23 | 显示全部楼层
抢沙发~我来顶楼主的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-1 22:11:59 | 显示全部楼层
STC89C52 发表于 2013-12-1 21:55
追问,山外哥那个想用指针改变一个字符串里的其中一个字母的话怎么办呢?

这个字符串是常量,是不能改变的,除非你把它定义到数组里面。
回复 支持 反对

使用道具 举报

发表于 2013-12-1 23:07:16 | 显示全部楼层
山外メ雲ジ 发表于 2013-12-1 22:11
这个字符串是常量,是不能改变的,除非你把它定义到数组里面。

#include"stdio.h"
void main()
{
char str[5]={'a','b','c','d','e'};
char *p=str;
p[2]='m';
printf("%s",p);
}
回复 支持 反对

使用道具 举报

发表于 2013-12-1 23:07:56 | 显示全部楼层
山外メ雲ジ 发表于 2013-12-1 22:11
这个字符串是常量,是不能改变的,除非你把它定义到数组里面。

#include"stdio.h"
void main()
{
char str[5]={'a','b','c','d','e'};
char *p=str;
p[1]='m';
printf("%s",p);
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-1 23:21:07 | 显示全部楼层
STC89C52 发表于 2013-12-1 23:07
#include"stdio.h"
void main()
{

你这样可能会输出乱码,数组之后的数据是不确定的,因为输出为 %s 字符串格式,你仅仅写入每个字符到数组里,却忽略了字符串的结束符。
其实,直接char str[] = "abcde";就好了。
回复 支持 反对

使用道具 举报

发表于 2013-12-1 23:28:33 | 显示全部楼层
咔咔,又来长知识啦~~~
回复 支持 反对

使用道具 举报

发表于 2013-12-2 00:15:27 | 显示全部楼层
打错了。。。
回复 支持 反对

使用道具 举报

发表于 2013-12-2 09:34:38 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-12-3 13:10:33 | 显示全部楼层
山外メ雲ジ 发表于 2013-12-1 23:21
你这样可能会输出乱码,数组之后的数据是不确定的,因为输出为 %s 字符串格式,你仅仅写入每个字符到数组 ...

真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-12-3 13:11:26 | 显示全部楼层
山外メ雲ジ 发表于 2013-12-1 23:21
你这样可能会输出乱码,数组之后的数据是不确定的,因为输出为 %s 字符串格式,你仅仅写入每个字符到数组 ...

真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-12-3 15:43:35 | 显示全部楼层
好搞笑哦
回复 支持 反对

使用道具 举报

发表于 2013-12-3 23:28:06 | 显示全部楼层
D
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-12-4 10:08:12 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-12-4 13:39:25 | 显示全部楼层
d走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-12-5 18:25:53 | 显示全部楼层
每日一次不大会啊 基础不行。。

点评

现在 不会做,所以才需要每日一题,补充各个基础知识。  发表于 2013-12-5 18:27
回复 支持 反对

使用道具 举报

发表于 2013-12-5 18:26:25 | 显示全部楼层
每日一次不大会啊 基础不行。。
回复 支持 反对

使用道具 举报

发表于 2013-12-9 01:08:37 | 显示全部楼层
运行异常

段错误

那个字符串是常量

代码中企图修改常量 引起段错误
回复 支持 反对

使用道具 举报

发表于 2013-12-13 13:43:01 | 显示全部楼层
c..............
回复 支持 反对

使用道具 举报

发表于 2013-12-26 19:31:32 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-12-30 15:36:56 | 显示全部楼层
回复看下  是不是D   
回复 支持 反对

使用道具 举报

发表于 2013-12-30 20:43:34 | 显示全部楼层
C走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2014-1-2 10:36:14 | 显示全部楼层
我选择答案是:amcde
回复 支持 反对

使用道具 举报

发表于 2014-1-2 10:40:02 | 显示全部楼层
太感谢了,
回复 支持 反对

使用道具 举报

发表于 2014-1-2 11:17:32 | 显示全部楼层
。。。。。
回复 支持 反对

使用道具 举报

发表于 2014-1-2 11:19:15 | 显示全部楼层
还是 不
回复 支持 反对

使用道具 举报

发表于 2014-1-5 21:43:32 | 显示全部楼层
老规矩,先回后下!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2014-1-7 08:31:24 | 显示全部楼层
首地址从0开始,答案为C
回复 支持 反对

使用道具 举报

发表于 2014-1-7 10:57:17 | 显示全部楼层
运行异常..
回复 支持 反对

使用道具 举报

发表于 2014-1-10 22:34:07 | 显示全部楼层
是不是C呢??
回复 支持 反对

使用道具 举报

发表于 2014-1-15 22:02:31 | 显示全部楼层
应该是D   出错误
回复 支持 反对

使用道具 举报

发表于 2014-1-15 22:03:12 | 显示全部楼层
应该是D   出错误
回复 支持 反对

使用道具 举报

发表于 2014-1-20 09:01:21 | 显示全部楼层
此题答案是D
回复 支持 反对

使用道具 举报

发表于 2014-1-21 14:18:10 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2014-1-21 21:57:37 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部