[英]What does this quote about char pointers mean?
我读过一段,但我不明白这是什么意思。...有人可以解释吗? 该段是:
将单个字符处理为char * string可能导致致命的运行时错误。 一个char *字符串是一个指针,可能是一个大整数。 但是,字符是一个小整数(ASCII 0-255)。 在许多系统上,取消引用字符会导致错误,因为低内存地址是为特殊目的而保留的,例如操作系统中断处理程序,因此会发生“内存冲突”。
这意味着您不应该执行以下操作:
char *pCh = 'A'; // this is the value 0x41 (assuming ASCII).
char Ch = *pCh; // probably not what you wanted.
因为字符和字符指针之间存在巨大差异。
实际上,当您尝试执行类似操作时,不错的编译器应向您发出警告。
其余的解释了一种可能的效果。 如果您在char
值为8位的系统中工作,则它们只能保存0到255(含0和255)之间的值(ISO C标准允许char值更大,但这并不常见)。 从该值集中随机选择的指针很有用的可能性很小。
这并不是完全没有问题的,因为您可能在嵌入式系统中,那里有内存映射的I / O,但在那种情况下,您更有可能使用#define IOPORT7 0x0041
类的东西,而使用IOPORT7
而不是'A'
。
另一方面,指针往往可以指向您的整个地址空间,该地址空间可以是32位宽(或更大)。 32位为您提供了指针可以指向的大约40 亿个可能值。
我会丢掉这本书,或者把它从任何你得到的地方丢掉。 这可能意味着您不应该尝试这样的事情:
char c = 'a';
strcmp(&c,"a"); // might accidentally work on some systems, but behaviour is undefined
这意味着,如果您有一个字符,即:
char c = 'p';
不要尝试取消引用c,即执行*c
,因为这将导致不确定的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.