c++ - 怎么输入指针的值?即输入指针所指区域的地址。
阿神
阿神 2017-04-17 13:00:41
0
4
980
#include <iostream>
using namespace std;
int main()
{
    int *i;
    i=(int*)malloc(sizeof(int));
    ...  
    //用cin或scanf输入i的值,即输入给定的地址
    ...
    return 0;
}

试过用cin>>iscanf("%d",&i)都不行,应该怎样写?

阿神
阿神

闭关修行中......

全部回覆(4)
阿神

scanf沒有輸入指標類型的方法,因此輸入數字再轉換成位址。測試程式碼和結果如下(8866的十六進位表示為22A2):

include

int main()
{

int *i;
int i_temp;
i=(int*)malloc(sizeof(int));
printf("i的地址为:%p\n",i);
printf("请输入i的地址:");
scanf("%d",&i_temp);
i=(int*)i_temp;
printf("赋值后i的地址为:%p\n",i);

return 0;
}

左手右手慢动作

輸入數字,然後強制轉換(

伊谢尔伦

問題不夠清晰。
你要給i賦值嗎?你這樣做了會使你malloc的位址,無法再被引用到,這會記憶體洩漏的。就是我們平常說的野指針。

如果你是想讓使用者輸入的內容直接存到這段記憶體中,那麼scanf("%d",i),因為i本來就是個位址,這裡不用&i.

如果你是想做在使用者指定的地址申請一段內存,那麼可以告訴你沒有這種需求的。我們用的位址都是虛擬位址,是系統分配的,不是隨便哪個位址都能用的。但是c語言很靈活,他並沒有從語言層面限制你,那麼非這樣做的話會有以下可能:
1.這段內存操作系統會保護的,直接報內存錯誤,程式崩潰。
2.你不知道改了哪裡的內存,反正讀寫正常,而且運行也沒錯,但是這種情況更危險,這是顆定時*,你永遠不知道什麼時候這段被踩的內存會錯亂,而且可能連續反應,整個呼叫棧被踩的稀巴爛,定位都沒辦法定位。大型程式都是這麼崩潰的。

阿神

翻翻cin的手冊不就行了嗎?

cin >> *i;
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板