我想下面的代碼片段的行爲應該是不確定的,但我只是想確保我的理解正確的事情。 比方說,我們有這樣的代碼:const char * to int cast?
#include <iostream>
int main()
{
std::cout << "mamut" - 8 << std::endl;
return 0;
}
所以我覺得這確實是(字符*)((INT)(爲const char *) - (INT)),但在此之後的輸出是非常奇怪的,不是我期望它有任何真正的意義。所以我的問題是關於char *和int之間的轉換 - 它是未定義的,還是有一些背後的邏輯?
編輯: 我只想補充一點:
#include <iostream>
int main()
{
const char* a = "mamut";
int b = int(a);
std::cout << b << std::endl;
std::cout << &a <<std::endl;
// seems b!= &a
for(int i = 0; i<100;i++)
{
std::cout<<(const char*)((int)a - i)<<std::endl;
}
return 0;
}
輸出我得到足夠大的給了我一個像_Jv_RegisterClasses等 只是爲了記錄後:
std::cout << a - i << std::endl;
產生相同的結果爲:
std::cout<<(const char*)((int)a - i)<<std::endl;
這是不確定的行爲,但不是因爲你覺得原因。 Google指針算術。 – 2014-10-20 12:31:16
你似乎認爲當你減去8時'const char *'被轉換爲'int'。這個假設是錯誤的。 – user2079303 2014-10-20 12:35:24
爲什麼這個假設是錯誤的?我的意思是你不能添加char *,因爲+沒有爲char * + char *定義。 – lightxbulb 2014-10-20 12:40:07