搜尋

首頁  >  問答  >  主體

c++ - 怎么输入指针的值?即输入指针所指区域的地址。

#include <iostream>
using namespace std;
int main()
{
    int *i;
    i=(int*)malloc(sizeof(int));
    ...  
    //用cin或scanf输入i的值,即输入给定的地址
    ...
    return 0;
}

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

阿神阿神2804 天前981

全部回覆(4)我來回復

  • 阿神

    阿神2017-04-17 13:02:41

    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;
    }

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 13:02:41

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

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:02:41

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

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

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

    回覆
    0
  • 阿神

    阿神2017-04-17 13:02:41

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

    cin >> *i;

    回覆
    0
  • 取消回覆