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 ...