C語言指標位址輸出問題,關於C語言指標位址輸出問題

時間 2023-01-27 13:40:06

1樓:無憂網事

能夠輸出位址值!

#include""

main()

這個程式就可以(注意變數名,前後要一致,不要用大寫!請將*p改為*p)。

將最後一行改為:printf("%x",b);你會看得更真切!(%x:按十六進製制輸出)

2樓:科學系08級

你把&與*兩個的功能搞錯了 ,乙個是取位址 乙個是指向 但不取。

3樓:

注意變數名區分大小寫,菜鳥。

4樓:匿名使用者

我沒看出來有什麼不對的。

關於c語言指標位址輸出問題

5樓:匿名使用者

(unsigned int)(void*)&取c1的位址。

(void*)&轉成無型別指標(unsigned int)(void*)&轉成整數(unsigned int)(void*)&a.

c1 - unsigned int)(void*)&a

結構a中變數c1的位址-結構a的位址。

= 變數c1在結構a中的位址偏移量。

---所以有這樣的結果。

*((char*)&a) =

*(short*)(byte*)&a)[1])

一般也就在a結構從位元組流中讀取時會使用到。

如:byte *p =(byte*)&a;

send( p, sizeof(a));網路傳送byte p[512];

recv(p, sizeof(a));網路接收然後可以。

teststruct1 *pa = teststruct1*)p; 轉成結構再處理。

也可以*((int*)&p[4]) 直接使用結構中的i變數。

6樓:匿名使用者

指的位址。

(unsigned int)(void*)&a,a的位址,相減的意思是的相對a的位址。該實驗是檢視相對位址的。

7樓:匿名使用者

檢視每個成員變數在結構體中的偏移的。

c語言結構指標輸出問題

8樓:司馬素枝篤妝

變數a為a[5]的乙個陣列,那麼在c語言規定中陣列名稱就是陣列首元素的指標,所以a+1指向a中的第二個元素。

*(a+1)取內容,所以輸出2

&a取a的位址,這時指標型別為元素為5個int的陣列型別的指標,位址長度為5*4

=20那麼&a

+1實際取得的是a陣列後面的乙個20位元組位置的指標,再強制轉換int型別指標(位址長度4),那麼prt

-1實際是從a陣列後面再返回乙個int(4位元組)就指向了最後乙個元素5;

c語言中變數指標輸出問題

9樓:匿名使用者

這和printf用%s的規則相關。

首先ps是乙個指向字元型資料的指標;printf用%s修飾輸出時需要提供乙個指標,這個指標指向的資料是字元型的,但printf將按照字串的規則來進行輸出,也就是輸出完這個指標指向的字元後,自動將指標加1,並判斷指向的字元是否為0,否則將輸出直至指向的資料為0為止,或者說找到字串結束標誌為止。

所以我們說,如果用%s修飾輸出是輸出字串,printf("%s",ps);,這句話要求提供乙個指標。

而要輸出單個字元的話應當用printf("%c",*ps);這時要求提供乙個字元型資料,用*ps表示ps指向的字元資料正好。

10樓:

值 位址。t 0030f8b0

h 0030f8b1

i 0030f8b2

此時有char *ps="this is a book"; 由於ps是char型別指標變數,它的指標域只能儲存位址,我們知道"this is a book"是乙個字串陣列且拿到了首元素的位址就可以找到它整個字串,所以ps的指標域儲存了首字元的位址即t的位址0030f8b0,而格式輸出符%s,就是輸出字串之意,即從t開始輸出直至遇到\0符為止。

如果有printf("%c",*ps); 則取ps所指向的位址0030f8b0的值即字元t,換句說就是ps代表指標域即位址0030f8b0,再加上「*」就是取值的意思,合起來就是取位址0030f8b0的值即字元t.

11樓:匿名使用者

printf()函式是乙個可變引數的函式 編譯時它根本不知道它需要多少個引數(必須乙個以上) 和引數的型別 只能在執行時確定 如何確定? 第乙個引數灰常重要(char *)它定義了後面接著多少個引數 和引數型別,printf函式通過分析字串 是否含有 %c %s 這些內容 就可以知道後面的引數個數和型別。

%s 表示引數是char* 型別的 也就是乙個字串的首位址 對 它只得到乙個開始的位址 它沒有結束得到的位址 那printf如何確定字元在**結束(或者它有多少長?) 答案顯而易見 字串後面的0

當然你可以不傳入乙個位址。

printf("%s",10);

10不是乙個有效的位址 printf知道它是有效還是沒有效的嗎? 它不知道 它只能傻傻地去訪問10這個位址 最終程式崩潰退出。

printf("%s","ps);

傳遞給printf的是什麼? ps裡面的值! printf分析第乙個引數的知道它需要乙個char* 型別的引數。

把ps的值看成是位址 而去訪問ps的值表示的位址(ps裡如果是'a' 對應的65這個位址)

位址非法 當然報錯退出。

12樓:水星大使

不不不,你要知道,你前面用的是%s,那你後面用ps這個指標就可以整個字串了。。。你如果你用*ps輸出整個字串的內容,把前面的%s改成%c,乙個乙個輸出。。。

%s就是輸出格式為字串,後面就跟指標不要*指標。

13樓:匿名使用者

ps的值就是字串首位址,如果用*ps只表示第乙個字元。另外printf 、scanf等函式內部都支援字串,所以不必在費心考慮取位址還是取值問題。

14樓:匿名使用者

32位windows記憶體位址採用平坦結構,記憶體位址都是32位整數,而指標變數的實質就是記憶體位址。所以,不管哪一種型別的指標變數都是4個位元組大小。

15樓:匿名使用者

樓主理解的對,ps就是代表變數的位址 *ps代表ps指向的位址空間存放的值。

關於c語言的指標問題(指標的位址+1問題) 10

16樓:小p精神

我來給你寫個例子,你參考一下。

int *p, *q,*s;

int a[3] =

p = a; /將a的首位址賦值給p 那麼p指向的值應該是a[0]的值2

printf("a[0] =d; *p = d ",a[0], p);

q = a[0] +1; /將a[0]的位址向右偏移一位就等於a[1]的位址 a[1] =8那麼*q應該等於8

s = q + 1; /將q指標向右偏移一位,相當於把a[1]的位址向右偏移一位,即a[2]的位址指向的值是25

//列印驗證一下。

printf("a[0] =d; *q = d ;a[1] =d *s = d", a[0], q,a[1],*s);

17樓:網友

輸出的四行**分別是:

a的值,a的位址+1的位址值(並非a的位址,因為你的p值已經+1了),*p表示的是p指向位址的內容值;

*q表示a的位址+17位址上內容的值。

c語言怎麼輸出指標位址?

18樓:匿名使用者

比如說乙個int a,想要輸出a的地,對a 直接取位址就行&a

如果有乙個int型的指標int* a,則a本身就是位址,而*a表示在該位址下儲存的內容。

c語言指標輸出資料問題

19樓:莊政警

這就是規則,格式符%s的含義就是:把對應的值看做乙個位址,按位元組讀取,然後輸出讀取到的值所對應的ascii碼,直到碰到0為止。

p1是個位址,假設p1的值是1000(也就是陣列a的起始位址),那麼從1000開始依次讀取到hikari\0 然後輸出。

如果是*p1 那麼*p1是'h','h'的ascii值是72, 那麼printf("%s",*p1); 就是從位址72開始讀取,也就是printf("%s",72); 而位址72是不允許使用者程式操作的,會出錯。

再舉個例子:

int a = 4407873;

printf("%s", a);

會輸出abc 因為變數a記憶體空間的值按位元組看就是'a','b','c','0'

c語言中指標的位址問題

20樓:王_大爺

首先我要指出的是根指標的位址與指標儲存的位址一般不可能相同~!(一樓列出的情況除外,將指標的位址賦給乙個變數再將變數的位址賦給指標)

舉個例子:int number,*p;

number=1;

p=&number;

你可以這樣理解,number 和 *p都是乙個整型資料變數,程式在記憶體中。

為它們都保留了乙個位址(兩個不同的位址),用以存放它們的值,在。

number的位址中儲存的值是1,在*p的位址中儲存的值是number的位址!

你也可以用 &p 求出*p 的根位址。(一般只在二維及以上陣列、鍊表等高階主題中用到指標的根位址)

21樓:網友

這個很難相同吧。

p是內容,&p是記憶體位址。

比如在0f003fba儲存了數字120

則&p=0f003fba,*p=120

當然你可以令a=&p

*p=a那麼*p就等於&p了。

C語言指標與位址的問題,C語言指標與位址的問題

只有當定義指標時才可以這樣寫 int pointer p 這條語句和 int pointer pointer p 兩條語句等價 printf func pointer 是把pointer所指向的值 變數 做函式引數 printf func pointer 是把pointer的本身所儲存的值,即所指向...

關於c語言的指標問題指標的位址1問題

小p精神 我來給你寫個例子,你參考一下 int p,q,s int a 3 p a 將a的首位址賦值給p 那麼p指向的值應該是a 0 的值2 printf a 0 d p d n a 0 p q a 0 1 將a 0 的位址向右偏移一位就等於a 1 的位址 a 1 8那麼 q應該等於8 s q 1 ...

c關於字串輸出問題,C 關於字串輸出問題

你好 這樣不行的 雖然說c 可以相容c語言 但是 string 是c 特有的 不可以把c 的字串以c的形式輸出 還有你要想用scanf printf標頭檔案也不對啊 滄海雄風 include include using namespace std int main string s cin s c ...