续贴-----面试问题(我已在"面试问题"回复了30次,不能再回复了)

lshforc 2003-09-14 12:50:27
TianGuangZao(天光早) :
良好得习惯是:
char a[] = "Hello";
char const *a = "Hello"; /* modifiable pointer to unmodifable data */
这样的话,可以指向同一块内存,但通过指针修改是非法的。



====================================
我完全同意你的这些观点.
但你说的这些是不是表明:
你认为楼主的题目中,指针a和指针b的值不相等,而必须这样定义

char a[] = "Hello";
char const *a = "Hello";

才会相等?
...全文
52 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2003-09-14
  • 打赏
  • 举报
回复
没什么,泡的时间长了,网友们总共赏的分数超过10000了,就两颗星了。^_^
lshforc 2003-09-14
  • 打赏
  • 举报
回复
为什么你是两颗星
晨星 2003-09-14
  • 打赏
  • 举报
回复
呵呵,你还合不拢嘴了,:)

QQ:6550976(最近上得少)
lshforc 2003-09-14
  • 打赏
  • 举报
回复
^_^

^_^
lshforc 2003-09-14
  • 打赏
  • 举报
回复
就此为止吧.

大伙也算有缘,留个qq吧,好联系.

谢谢大伙的支持!!

QQ:16650737
晨星 2003-09-14
  • 打赏
  • 举报
回复
lshforc()兄:

从昨天一直争到现在,你我都耗费了不少时间。兄弟我到现在还没有完成昨天的学习任务,连室友都在嘲笑我。:( 不知老兄那边如何?:)

争到现在,我觉得焦点已经很明确了,主要是:
1。对于:
char *p = "Hello";
char *q = "Hello";
您认为这应该是定义了两个独立的字符串,修改其中一个,另一个应该维持不变才对。而我则认为这根本没定义任何字符串,而只是定义了两个字符指针,并分别使用静态存储区中某段内存的首地址来初始化他们,因此,这两段内存是否相同,无所谓。
2。您认为静态存储区中的字符串常量可能被修改,因此如果因为修改导致了不可预知的后果,编译器应对此负责;而我认为静态存储区中的字符串常量不应被修改(除非故意),如果因为修改导致了不可预知的后果,属于程序员咎由自取,与编译器无关。

而且,在近期内,我们似乎谁都无法说服对方;既然如此,那就到此为止吧。否则,我们又要浪费不少时间,而且成效为0。
本来,对于编译器相关的问题,兄弟一直不怎么感兴趣。但这个帖子到底还是让老兄搞得热热闹闹,又有续帖,兄弟也学到了不少,所以,还是谢谢你,^_^。
wkoji 2003-09-14
  • 打赏
  • 举报
回复
good
晨星 2003-09-14
  • 打赏
  • 举报
回复
“输出是什么? a 还是s?”
所有与编译器相关的问题我真的不爱回答。因为要么回答了也不对,要么就是回答中夹杂着一大堆“或”。

“那我怎么能储存1000个单词呢?c标准说过这样初始化不行吗?”
C没说这样初始话不可以,但后果你要自己负责。因为除非有人不想让程序正常运行,否则他不会建议你把程序中不断变化(连长度都在变)的关键字符串数据保存倒静态存储区。多少简单易行、安全有效的方法你不用,尽琢磨着怎么修改静态存储区中的字符串常量。有一句古语:“天堂有路你不走,地狱无门你进来”。说的真是不假。
特别要注意你的程序即使每个"aaaa"分别独立占有静态存储区都不可以,因为你后面的字符串长度需要变化,而真正的字符串内容到运行时才能确定。即使这1000个"aaaa"各自独立,它们在静态存储区也是紧凑存储的。我倒觉得,傻瓜的编译器才会让他各自独立。

你可以考虑使用STL的string为什么不会出问题。以便作个对比。对于
string s[1000];
for(int i = 0 ; i < s ; i++)
s[i] = "Hello";
因为所有的初始化都调用了构造函数,尽管所有的构造函数使用的都是同一个参数(他们在静态存储区中也只有一份),但构造函数把这一份字符串分别拷贝到自己的字符缓冲里去了。所以不会有任何问题。
可惜的是,一个简单的字符指针,不过是个内建类型的小变量,它哪有这种功能?

“我们是不是很自然的认为我们定义(或者说是初始化)了两个串。”
我不知道您是否“很自然”地这样认为,但我知道这种想当然恰恰是要不得的。

最后,恕兄弟直言。如果要编一个统计单词的程序,除非你后面使用new重新为各个p[i]分配内存,否则,你那段程序只能用两个字来形容:荒唐!
晨星 2003-09-14
  • 打赏
  • 举报
回复
“输出是什么? a 还是s?”
所有与编译器相关的问题我真的不爱回答。因为要么回答了也不对,要么就是回答中夹杂着一大堆“或”。

“那我怎么能储存1000个单词呢?c标准说过这样初始化不行吗?”
C没说这样初始话不可以,但后果你要自己负责。因为除非有人不想让程序正常运行,否则他不会建议你把程序中不断变化(连长度都在变)的关键字符串数据保存倒静态存储区。多少简单易行、安全有效的方法你不用,尽琢磨着怎么修改静态存储区中的字符串常量。有一句古语:“天堂有路你不走,地狱无门你进来”。说的真是不假。
特别要注意你的程序即使每个"aaaa"分别独立占有静态存储区都不可以,因为你后面的字符串长度需要变化,而真正的字符串内容到运行时才能确定。即使这1000个"aaaa"各自独立,它们在静态存储区也是紧凑存储的。我倒觉得,傻瓜的编译器才会让他各自独立。

你可以考虑使用STL的string为什么不会出问题。以便作个对比。对于
string s[1000];
for(int i = 0 ; i < s ; i++)
s[i] = "Hello";
因为所有的初始化都调用了构造函数,尽管所有的构造函数使用的都是同一个参数(他们在静态存储区中也只有一份),但构造函数把这一份字符串分别拷贝到自己的字符缓冲里去了。所以不会有任何问题。
可惜的是,一个简单的字符指针,不过是个内建类型的小变量,它哪有这种功能?

“我们是不是很自然的认为我们定义(或者说是初始化)了两个串。”
我不知道您是否“很自然”地这样认为,但我知道这种想当然恰恰是要不得的。

最后,恕兄弟直言。如果要编一个统计单词的程序,除非你后面使用new重新为各个p[i]分配内存,否则,你那段程序只能用两个字来形容:荒唐!
lshforc 2003-09-14
  • 打赏
  • 举报
回复
强烈抗议:
为什么最多只允许发表30张帖子!!!!!!!!!!!!!!!
强烈不满!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
什么破规则!!!!!!!!!!!!!!!!!!


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
晨星 2003-09-14
  • 打赏
  • 举报
回复
To:ckacka(小红帽)
http://expert.csdn.net/Expert/topic/2229/2229145.xml?temp=.8754541
^_^
lshforc 2003-09-14
  • 打赏
  • 举报
回复
如果c语言用指针来表示字符串(或者说用指针代表字符串)
那么,当我们采用以下定义时:
char *a="qqq";
char *b="qqq";
我们是不是很自然的认为我们定义(或者说是初始化)了两个串,就像
char *a="www";
char *b="qqq";
一样.

ckacka 2003-09-14
  • 打赏
  • 举报
回复
原帖我怎么没有看到过?谁给个URL
ckacka 2003-09-14
  • 打赏
  • 举报
回复
????????????????????????????????????????
lshforc 2003-09-14
  • 打赏
  • 举报
回复
steedhorse(晨星):
我们争得越多就越偏离主题. 这样吧,干脆点,请你回答以下问题:

char *a="abcd";
char *b="abcd";
*a='s';
cout<<*b;
输出是什么? a 还是s?

如果我要做一个字符串数组,它的每个元素是四个字母的单词,共1000个单词.那我完全可以这样定义并初始化:
char *p[1000];
for(int i = 0 ; i < 1000 ; i++)
p[i] = "aaaa";
如果编译器进行"优化",使每个p[i]都指向同一个"aaaa";
那我怎么能储存1000个单词呢?
(我们不是经常使用相同的值来初始化吗,如果编译器对此进行优化那,那岂不是灾难)

c标准说过这样初始化不行吗?







晨星 2003-09-14
  • 打赏
  • 举报
回复
JoeRen(地球发动机)所说的“本来不应当是合法的”是说C++标准的制定者本来考虑过这个问题,但为了与C兼容,还是允许这样使用了。

C之所以允许,我认为是C的设计者的确没想到会有人专门琢磨着修改静态存储区中的字符串常量。所以也可以说是一个失策。但最初C的设计者也没想到C会这么流行倒是真的。
晨星 2003-09-14
  • 打赏
  • 举报
回复
“导致两个独立的串不能独立地修改。”
从来没有人说过那是两个独立的串。

lshforc 2003-09-14
  • 打赏
  • 举报
回复
JoeRen(地球发动机) :
本来
char *a="Hello";
这样的语句在C++不应当是合法的


=============
什么叫不应当是合法的?
既然可以使用,就是合法的.

====================================================================
晨星 2003-09-14
  • 打赏
  • 举报
回复
呵呵,真累。
老兄绕圈子的本事令人高山仰止。绕了半天,又说“char*可以定义字符串”。不是有没有独立性的问题,是那根本就不是两个字符串,而是两个毫不不相关的字符指针,既然不相关,你为何要一定要阻止它们指向同一个位置?
也并不是说char[]就能定义两个独立的字符串,原因是数组必须有自己的各自的存储空间(联合体除外),你不想让它独立都不行。不仅字符数组如此,整数数组和浮点数数组都如此。

既然你知道一对引号可以拥有一个地址的右值,那么你又有什么理由要求这个"Hello"和那个"Hello"必须拥有不同的地址?不仅字符指针可以指向同一个位置,整数指针和浮点数指针也可以指向同一个位置。
char *p = "Hello";
根本就没定义什么字符串,只是定义了一个字符指针,而且要求它开始时指向了一块存储着“Hello”的地方,这些,编译器都为你办到了。如果再出问题,那时程序员自己的事。归根结底,还是因为char *p = "Hello";并不像你所说的“定义了一个字符串”。

你认为
char *p , *q;
p = "Hello";
q = "Hello";

char *p , *q;
p = q = "Hello";
必须不一样,就是因为前者写了两遍"Hello"?
要知道,前后两组语句都只是定义了两个字符指针(而不是两个字符串),只是在某一次赋值(或者初始化也可以)时,他们都引用了静态存储区中的一个保存着"Hello"的内存段首地址而已。而前者引用了两次(这两次是不是同一个地址不得而知),后者引用了一次。

“难道就只有"只是为了在不同的地方引用他们"这种场合吗”
如果不是,请使用字符数组(栈上的,堆上的都可以),或者STL、MFC中的类。

如果你坚持使用由字符串常量所初始化的字符指针来做串处理(包含改写动作),那麻烦还多着呢。比如说,万一字符串需要增长怎么办?
所以说,静态存储区中的字符串常量就是用来读的,派做他用也不是不可以(虽然很蹩脚),但不要以此为理由说人家编译器怎么怎么愚蠢,因为是你自愿的。闪着一大堆方法不用,非要修改静态存储区中的字符串常量,是不是很无聊?
lshforc 2003-09-14
  • 打赏
  • 举报
回复
steedhorse(晨星) :
你所罗列的char *和char[]的不同并不能解释 用char*定义的串没有独立性,而用char[]定义的就有独立性.
我绝对支持代码优化,但前提是:任何一种优化都不得影响程序的正常执行,比如导致两个独立的串不能独立地修改.
否则,即使这种优化能给予程序执行效率几何级数的增长,也是完全失败的

==========================================================
char *a , *b , *c;
a = b = c = "Hello";

这段程序和优化有什么关系?
这些定义不是很清楚吗?!:
引号返回一个串的首地址,在把首地址赋予指针变量c,b和c. 指针abc的值决对相同,
这不是很明了吗?
这和优不优化有什么关系?

==============================================================
char *p[1000];
for(int i = 0 ; i < 1000 ; i++)
p[i] = "Hello";
*****这种代码,如果只是为了在不同的地方引用他们,不该做优化吗?*****


可别忘了,很多文本编辑器也是采用类似过程处理它的每个单词,用类似的方式进行初始化(当然,实际过程肯定复杂多了,初始化也不会采用"hello"这种特殊的单词,也不会用这么长的单词,一般是空串)
初始化后,我们就得使用到串组中的每一个串,就要求它们独立.
还有,现在提倡代码复用,你怎么可能知道这样的代码将用在什么场合,难道就只有"只是为了在不同的地方引用他们"这种场合吗

=========================================================================
void * f(const char *p);
假如f("Hello")一共被调用了一百次,那么也应该在静态存储区中保存100个"Hello"吗


我的回答是
我绝对支持代码优化,但前提是:任何一种优化都不得影响程序的正常执行,比如导致两个独立的串不能独立地修改.



加载更多回复(7)
昨日,11.19,最新整理了,第61-80题,现在公布上传。 另加上之前公布的第1-60 题,在此做一汇总上传,以飨各位。 可以这么说,绝大部分的面试题,都是这100 道题系列的翻版, 此微软等公司数据结构+算法面试100 题系列,是极具代表性的经典面试题。 而,对你更重要的是,我自个还提供了答案下载,提供思路,呵。 所以,这份资料+答案,在网上是独一无二的。 ------------------------------------ 整理资源,下载地址: 答案系列: 1.[最新答案V0.3 版]微软等数据结构+算法面试100 题[第21-40 题答案] http://download.csdn.net/source/2832862 2.[答案V0.2 版]精选微软数据结构+算法面试100 题[前20 题]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1 版本,进行的校正与修正。 3.[答案V0.1 版]精选微软数据结构+算法面试100 题[前25 题] http://download.csdn.net/source/2796735 题目系列: 4.[第一部分]精选微软等公司数据结构+算法经典面试100 题[1-40 题] http://download.csdn.net/source/2778852 5.[第1 题-60 题汇总]微软等数据结构+算法面试100 题 http://download.csdn.net/source/2826690 更多资源,下载地址: http://v_july_v.download.csdn.net/ 若你对以上任何题目或任何答案,有任何问题,欢迎联系我: My E-mail: zhoulei0907@yahoo.cn ------------- 作者声明: 本人July 对以上公布的所有任何题目或资源享有版权。转载以上公布的任何一题, 或上传百度文库资源,请注明出处,及作者我本人。 向你的厚道致敬。谢谢。 ---July、2010 年11 月20 日。 ------------------------------------------------------ 各位,若对以上100题任何一道,或对已上传的任何一题的答案, 有任何问题,请把你的思路、想法,回复到此帖子上, 微软等100题系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html
作者:July、阿财。 时间:二零一一年十月十三日。 ------------------------------ 无私分享造就开源的辉煌。 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际,特此分享出微软面试 全部100题答案的完整版,以作为对本博客所有读者的回馈。 一年之前的10月14日,一个名叫July 的人在一个叫csdn 的论坛上开帖分享微软等公司数据结构+算法 面试100题,自此,与上千网友一起做,一起思考,一起解答这些面试题目,最终成就了一个名为:结构之法 算法之道的编程面试与算法研究并重的博客,如今,此博客影响力逐步渗透到海外,及至到整个互联网。 在此之前,由于本人笨拙,这微软面试100题的答案只整理到了前60题(第1-60题答案可到本人资源下 载处下载:http://v_july_v.download.csdn.net/),故此,常有朋友留言或来信询问后面40题的答案。只是 因个人认为:一、答案只是作为一个参考,不可太过依赖;二、常常因一些事情耽搁(如在整理最新的今年 九月、十月份的面试题:九月腾讯,创新工场,淘宝等公司最新面试十三题、十月百度,阿里巴巴,迅雷搜狗 最新面试十一题);三、个人正在针对那100题一题一题的写文章,多种思路,不断优化,即成程序员编程 艺术系列。自此,后面40题的答案迟迟未得整理。且个人已经整理的前60题的答案,在我看来,是有诸多问 题与弊端的,甚至很多答案都是错误的。 互联网总是能给人带来惊喜。前几日,一位现居美国加州的名叫阿财的朋友发来一封邮件,并把他自己 做的全部100题的答案一并发予给我,自此,便似遇见了知己。十分感谢。 任何东西只有分享出来才更显其价值。本只需贴出后面40题的答案,因为前60题的答案本人早已整理上 传至网上,但多一种思路多一种参考亦未尝不可。特此,把阿财的答案再稍加整理番,然后把全部100题的答 案现今都贴出来。若有任何问题,欢迎不吝指正。谢谢。 上千上万的人都关注过此100题,且大都都各自贡献了自己的思路,或回复于微软100题维护地址上,或 回复于本博客内,人数众多,无法一一标明,特此向他们诸位表示敬意和感谢。谢谢大家,诸君的努力足以影 响整个互联网,咱们已经迎来一个分享互利的新时代。 感谢诸君,请享用.....
火爆出炉:微软等数据结构+算法面试100题首完整亮相 ---100题V0.1版最终完成 作者:July 2010年12月6日 微软等100题系列V0.1版终于结束了。 从2010年10月11日当天最初发表前40题以来,直至此刻,整理这100题,已有近2个月。 2个月,因为要整理这100题,很多很多其它的事都被我强迫性的搁置一旁, 如今,要好好专心去做因这100题而被耽误的、其它的事了。 这微软等数据结构+算法面试100题系列(题目+答案),到底现在、或此刻、或未来, 对初学者有多大的意义,在此,我就不给予评说了。 由他们自己来认定。所谓,公道自在人心,我相信这句话。 任何人,对以下任何资料、题目、或答案,有任何问题,欢迎联系我。 作者邮箱: zhoulei0907@yahoo.cn 作者声明: 转载或引用以下任何资料、或题目,请注明作者本人July及出处。 向您的厚道致敬,谢谢。 好了,请享受这完完整整的100题吧,这可是首完整亮相哦。:D。 ............ ............ 答案系列: 5.[最新答案V0.3版]微软等数据结构+算法面试100题[第21-40题答案] http://download.csdn.net/source/2832862 6.[答案V0.2版]精选微软数据结构+算法面试100题[前20题]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1版本,进行的校正与修正。 7.[答案V0.1版]精选微软数据结构+算法面试100题[前25题] http://download.csdn.net/source/2796735 剩下的第41-100题答案,正在整理中。预计明年整理公布。 请各位,细心的等待。谢谢。 更多资源,下载地址: http://v_july_v.download.csdn.net/ ================================== 更多详情,请参见本人博客: My Blog: http://blog.csdn.net/v_JULY_v --------------------------------------------------------------------------------------- 各位,若对以上100题任何一道,或对已上传的任何一题的答案, 有任何问题,请把你的思路、想法,回复到此帖子上, 微软等100题系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html
精选微软等数据结构+算法面试100题答案修正V0.2版本 -------------------- 此份答案是针对,前期已公布的最初的那份答案的,初步校正与修正。 http://download.csdn.net/source/2796735(V0.1版) 相比第一份V0.1版答案,此份答案V0.2版更加准确,亦修正了不少题目的答案。 此份20题的答案,思路更加清晰易懂,简介明了。 请享用。July、2010/11/06。 其它资源,下载地址: 1.[最新答案V0.3版]微软等数据结构+算法面试100题[第21-40题答案] http://download.csdn.net/source/2832862 2.[第1题-60题汇总]微软等数据结构+算法面试100题 http://download.csdn.net/source/2826690 3.[答案V0.2版]精选微软数据结构+算法面试100题[前20题]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1版本,进行的校正与修正。 4.[答案V0.1版]精选微软数据结构+算法面试100题[前25题] http://download.csdn.net/source/2796735 5.[第二部分]精选微软等公司结构+算法面试100题[前41-60题]: http://download.csdn.net/source/2811703 6.[第一部分]精选微软等公司数据结构+算法经典面试100题[1-40题] http://download.csdn.net/source/2778852 更多资源,下载地址: http://v_july_v.download.csdn.net/ ------------------------------------------------------ 各位,若对以上100题任何一道,或对已上传的任何一题的答案, 有任何问题,请把你的思路、想法,回复到此帖子上, 微软等100题系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧