[英]C++ undefined behavior
unsigned char * numbers = {1,1,1};
unsigned short * ptr = (unsigned short*) numbers;
*(++ptr)=2;
printf("%d %d %d %d", numbers[0], numbers[1], numbers[2], numbers[3]);
以上可能會導致未定義的行為,對嗎? 另外,屏幕上會打印什么?
結果是1 1 2 0
,但可以在某個時候打印1 1 0 2
嗎?
這將導致未定義的行為。 首先,因為你讓一個 char 指針指向一個整數數組:注意unsigned char * numbers = {1,1,1};
之間的區別unsigned char * numbers = {1,1,1};
和unsigned char numbers[] = {1,1,1}; unsigned char* ptr = numbers;
unsigned char numbers[] = {1,1,1}; unsigned char* ptr = numbers;
.
也是因為程序違反了嚴格的別名規則。 任何事情都可能發生:程序可能會打印某種結果、垃圾或崩潰。
此外,您對 unsigned short 的強制轉換假定了一定的 CPU 字節序。 因此,如果您的程序碰巧出現未定義的行為“打印某種結果”,則該結果將取決於 CPU 字節序。
以上可能會導致未定義的行為,對嗎?
(1)不僅行為是不確定的,但它永遠是不確定的。
另外,屏幕上會打印什么?
根據 (1) 未定義
這會在某些計算機中打印“1 1 0 2”嗎
它可能。 或者它可能不會。 這是可能的,因為任何結果都是可能的。 見(1)。
我們不確定最后一個字符是什么,但第 1 個 3 將被打印出來。
它們可能不會被打印好。 見(1)。
這段特殊的代碼:
unsigned char * numbers = {1,1,1};
不會編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.