c語言問題求教 關於指標變數問題

2021-12-25 02:11:11 字數 2441 閱讀 8071

1樓:郝在益

你不知道為什麼會這樣??其實,這個也很好理解的。

因為你的p是指向int型資料的,而int型資料在你的編譯器中佔用的是4個位元組,所以你的結果才是-2,而不是-8.

就拿你這個程式來說吧。p指向的是記憶體單元1638212。

但是p+1指向的確實1638212+4.而不是1638212+1.這是由你的資料型別所決定的。

如果你還不能理解的話,再給你舉一個例子你就能夠明白了。

如果你定義int a[10];

int *p = a;

如果這個時候p的值為1638212。

那麼也就是說a[0]的地址也是1638212。

那麼a[1]的地址就是1638212+4了。

而*(p+1)等價於p[1],也等價於a[1]的。

這個時候p+1是等於1638212+4的。

這樣的推理你能看懂不?

指標加1之後所指向的空間,並不是再原本指向的空間之後加1,而是加這個指標所指向的資料型別所佔有的空間字元數。

不信的話,你可以把int改為short試試,答案應該是-4.short只佔2個位元組。

看看下面的截圖吧。

2樓:匿名使用者

int所佔位元組是4個位元組,兩個指標相減跟兩個整形變數相減應該不同,指標相減的結果個人感覺是兩個指標所處地址所相差的位元組數,所以我想這塊我想2表示的是兩個int型變數所佔的位元組數即就是8,個人想法,僅供參考

3樓:匿名使用者

簡單點說吧

因為你的兩個指標都是指向int型資料 而int型資料的每個記憶體單元佔4個位元組,那麼就相當於你走路邁一步等於邁了四步!那麼你想想看,p和q的記憶體地址相差8,是不是q邁兩步就到了p呢?

4樓:

p和q是指標型別,不是整型,這兩個的運算式有區別的,比如p++,p的值增加的是一個整型數所佔的位元組數,而不是簡單的加1,在你的這個編譯系統,整型分配了4位嗎?所以q-p =-2?

5樓:學小平

這個與指標的型別有關,如果想要達到您的-8效果,您可以將p、q的指標型別強制裝換為char型再試一試。需要注意的是在使用指標偏移的時候,偏移的具體位元組數是與位元組的型別直接相關的。比如:

char *p;和int *q;的兩個指標分別+1的時候偏移的具體位元組數是不同的,p+1具體偏移一個位元組(一般是一個位元組,與具體編譯器對char的定義相關);q+1具體偏移的int型別個位元組(這與int型在編譯器中的定義相關)。

6樓:匿名使用者

p和q是指標,不是int變數,q-p =-2意味著p=q+2,即p是在q偏移兩位後的指標,具體偏移量由指標型別決定,這裡就是4

7樓:佘翰藻

指標相減結果是(相差的位元組數除以sizeof(指標指向的型別大小))

c語言中連結串列中的結構體指標變數問題。。。求教

8樓:

定義結構體指標變數時,只分配儲存指標型別需要的空間,比如listnode *p;這裡p有給他分配儲存指標的4個位元組的空間。

實際上你是要讓p指向一個結構體空間的,這個結構體空間在哪?

可以先定義listnode a;

然後 p=&a;

這時p指向一個之前申請分配過空間(編譯器設定過其地址和大小,在棧空間存放著了)。

現在我們要讓p指向一個臨時決定分配的空間(我們需要用來儲存輸入資訊或計算資訊),並讓p指向他,使得之後我們隨時通過p來訪問他。於是使用malloc先分配記憶體,並把malloc返回的地址賦值給p。在這裡,我們不能使用定義臨時結構體變數並讓p之前他(就如上面所說的p=&a),因為在子函式定義的變數,他們都是分配在子函式被呼叫時為其建立的棧空間,子函式退出時這些空間被釋放**,我們定義的變數生命結束,他們所在地址會被其他子函式被呼叫時建立棧空間所重用,那些地址很可能被新函式使用並修改所存資料。

這是我們不敢想象的,為了資料安全,必須使用malloc分配記憶體,因為malloc分配的記憶體是在堆空間分配,只有使用free後,其記憶體才會釋放,才能被其他地方重新分配。

9樓:匿名使用者

宣告結構體指標變數的時候,難道沒有為其分配記憶體嗎?

a:沒有,需要malloc

這和普通的指標分配沒有區別。

typedef struct stu

stu_t;

void main()

10樓:透明的沙漏

指標宣告的時候只是開闢了一個存放地址的記憶體,不管你這個指標是指向物件的還是char還是別的型別,指標宣告開闢的空間是一樣的,因為對於指標來說它存的只是地址,至於地址裡面的是char還是long對於宣告指標的記憶體是沒有關係的,所以如果指標要裝東西,需要malloc一個記憶體來存放char或者long型的東西

11樓:匿名使用者

在3kw的電爐盤上裝上5kw的爐絲可以嗎

C語言指標問題,求教大神C語言指標的問題搞不懂求大神指教

include include include include include static char chongpai char static int pare const void const void static int allocateintegerarr const char size ...

c語言指標問題?指標和指標變數我區分不了求指

其實這裡有這麼幾點需要明白 我們通常會先宣告定義一個變數。如 int a a 10 那麼我們就在記憶體中開闢了一塊空間,我們把這空間用a來標記。我們把a叫做整型變數!很容易理解a變數此時的值或內容是10,但還有一個問題你要知道,我們怎麼樣才能找到a在記憶體中的位置?這就是用這塊記憶體的開始的地址來標...

c語言的指標問題,C語言的指標問題

printf c p 3 分佈來看,c是要列印輸出一個字元。p指向那個字元陣列,p就是字元 a 那麼 a 3是多少呢,a 1是b 2 是c 3 是d注意是 p 3 而不是 p 3 這是由區別的。是的。p 3。是對p指向的那個值加3,p開始是指向a的,故a加3後就是d了 而p 執行3次的話,是指標p本...