user-0 提问: 使用动态内存分配的指针，书上这个代码是不是笔误？

回复:
user: user-1
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？

user: user-0
content: 引用 12 楼 sholber 的回复:[quote=引用 11 楼 u010165006 的回复:] [quote=引用 9 楼 sholber 的回复:] [quote=引用 8 楼 mxiaomi 的回复:] 只能认为是笔误了，不然能说作者不专业吗  x=0不意味着存储在对象x中的比特全都是0[/quote] 怎解？[/quote] 那要看C的实现用什么来表示负数了。用有符号整数类型表示值的的时候，应选择以下三种方案之一： 1，符号带大小（sign and magnitude）。符号比特不表示具体的值，仅代表正负；符号比特为“1”意味着一个负值。这种方案的特点是数值0有两种对象表示，通常称为正常零（符号比特和值比特都是“0”）和负零（符号比特为“1”，所有值比特都是“0”）； 2，对1补码（1’s complement）。在这种方案下，符号比特表示的值为-(2^m-1)，m是值比特的个数。在这种方案下，数值0同样有两种对象表示，正常零是符号比特和值比特都为“0”，负零是符号比特和值比特都为“1”； 3，对2的补码（2’s complement）。在这种方案下，符号比特表示的值为-2^m，m是值比特的个数。对2的补码是个人计算机中用得最多的方案。  这些知识值200分，你只有20，全给我吧。哈哈…… [/quote] 计算机组成原理好像有讲这些，再说对于特定的平台，0的补码表示法是唯一的吧，程序赋值0和判断是否非零应该没问题，我是觉得>>操作高位补1还是补0才是编译器相关的。

user: user-2
content: 引用 13 楼 u010165006 的回复:[quote=引用 12 楼 sholber 的回复:] [quote=引用 11 楼 u010165006 的回复:] [quote=引用 9 楼 sholber 的回复:] [quote=引用 8 楼 mxiaomi 的回复:] 只能认为是笔误了，不然能说作者不专业吗  x=0不意味着存储在对象x中的比特全都是0[/quote] 怎解？[/quote] 那要看C的实现用什么来表示负数了。用有符号整数类型表示值的的时候，应选择以下三种方案之一： 1，符号带大小（sign and magnitude）。符号比特不表示具体的值，仅代表正负；符号比特为“1”意味着一个负值。这种方案的特点是数值0有两种对象表示，通常称为正常零（符号比特和值比特都是“0”）和负零（符号比特为“1”，所有值比特都是“0”）； 2，对1补码（1’s complement）。在这种方案下，符号比特表示的值为-(2^m-1)，m是值比特的个数。在这种方案下，数值0同样有两种对象表示，正常零是符号比特和值比特都为“0”，负零是符号比特和值比特都为“1”； 3，对2的补码（2’s complement）。在这种方案下，符号比特表示的值为-2^m，m是值比特的个数。对2的补码是个人计算机中用得最多的方案。  这些知识值200分，你只有20，全给我吧。哈哈…… [/quote] 计算机组成原理好像有讲这些，再说对于特定的平台，0的补码表示法是唯一的吧，程序赋值0和判断是否非零应该没问题，我是觉得>>操作高位补1还是补0才是编译器相关的。[/quote]  特定的平台和编译器有啥区别？难道0的补码表示和平台有关，和编译器无关？再说，我说的是那本书写得太武断，这和特定平台有什么关系。哪怕世界上有一个机器用的是对1的补码，他都不能那么写书。

user: user-2
content: 引用 11 楼 u010165006 的回复:[quote=引用 9 楼 sholber 的回复:] [quote=引用 8 楼 mxiaomi 的回复:] 只能认为是笔误了，不然能说作者不专业吗  x=0不意味着存储在对象x中的比特全都是0[/quote] 怎解？[/quote] 那要看C的实现用什么来表示负数了。用有符号整数类型表示值的的时候，应选择以下三种方案之一： 1，符号带大小（sign and magnitude）。符号比特不表示具体的值，仅代表正负；符号比特为“1”意味着一个负值。这种方案的特点是数值0有两种对象表示，通常称为正常零（符号比特和值比特都是“0”）和负零（符号比特为“1”，所有值比特都是“0”）； 2，对1补码（1’s complement）。在这种方案下，符号比特表示的值为-(2^m-1)，m是值比特的个数。在这种方案下，数值0同样有两种对象表示，正常零是符号比特和值比特都为“0”，负零是符号比特和值比特都为“1”； 3，对2的补码（2’s complement）。在这种方案下，符号比特表示的值为-2^m，m是值比特的个数。对2的补码是个人计算机中用得最多的方案。  这些知识值200分，你只有20，全给我吧。哈哈……

user: user-0
content: 引用 9 楼 sholber 的回复:[quote=引用 8 楼 mxiaomi 的回复:] 只能认为是笔误了，不然能说作者不专业吗  x=0不意味着存储在对象x中的比特全都是0[/quote] 怎解？

user: user-2
content: 引用 8 楼 mxiaomi 的回复:只能认为是笔误了，不然能说作者不专业吗  他本来就是不专业。居然说出“写入的0是二进制0”这样的话。 x=0不意味着存储在对象x中的比特全都是0

user: user-3
content: 只能认为是笔误了，不然能说作者不专业吗

user: user-4
content: 划线那行多了个星号  指针直接可以当数组用

user: user-5
content: 直接就是不能编译了，gcc和vs我都试了

user: user-0
content: 引用 5 楼 Mingyueruya 的回复:直接就是不能编译了，gcc和vs我都试了 通不过编译更好，估计写书的人是笔误，否则就误人子弟了。

user: user-6
content: 是笔误，鉴定完毕

user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-7
content: 是的     char * ch;     ch = (char *) malloc(sizeof(char)*6);          int i=0;     while(i<6)     {     	ch[i] = 'a';     	i++;     }

user: user-8
content: 应该是吧，这样会编译错误的，正确写法是p[i] = 0;

user: user-9
content: 书上不是说了，让你考虑一下么