2014-10-18 45 views
-7
char* a=(char*)malloc(10); 

char* b="ddd"; 

*a = *b; 

printf("%x\n", a);//print the pointer's address(a) which is not pointer b's address 

printf("%x\n", *a);//what does the print-result mean??? is it the address that b point to? 

據我所知,a = b;意味着指向b的地址。* a = * b在C中表示什麼?

+1

使用'%p'打印指針:'的printf( 「%P \ n」 個,一個);' – 2014-10-18 12:23:13

+0

'* a'表示「指針」a指向的內容「。 – 2014-10-18 12:24:38

+2

'* b'是位於'b'指向的第一個'char',它是一個''d''。 '* a'是地址指針「a」指向的第一個字節。所以'* a = * b'將'a'指向的第一個位置設置爲值''d''。 – lurker 2014-10-18 12:24:53

回答

0
*a = *b; 

上面的語句將簡單地做到這一點:值(a)< - 值(b)(即指針a將包含值'd')。

printf("%x\n", a); 

這將以十六進制打印指針的地址(a)。但是,請始終使用"%p"格式標識符來打印地址。 "%x"用於以十六進制格式打印值。

printf("%x\n", *a); 

由於值(a)是其ASCII值100(百十進制) 'd'。 因此"%x"將打印100的十六進制值,即64。因此,此聲明將打印64

沒有上述聲明將不打印指針的地址(b)。

然而,指針的地址(b)可以通過下面的語句打印:

printf("%p", b); 
+0

如何將b(即%p print)的地址值放入指向的地址? – 2014-10-18 14:01:02

+1

請在您的術語中更具歧視性。所有對象,指針或不包含,都包含一個值。如果你指的是指針對象的指針,那就這麼說吧。另外,使用'「%p」'打印指針不是一個偏好問題,而是正確性。這個UB將會中斷的最可能的實現是普通的64位系統,因爲sizeof(char *)!= sizeof(int)'。接下來,您可能想要展開爲什麼最後一條語句輸出「64」:請參閱[可變參數函數和默認促銷](https:// stackoverflow。COM /問題/ 22844360/C-C-可變參數,功能和默認-促銷)。 – Deduplicator 2014-10-18 14:16:29

+0

附加註釋:不要將您的解釋格式化爲源代碼,破壞代碼塊並使其成爲普通文本。 (如果你願意,在做這些改變之後給我發一下,我會看看它現在是否值得進一步的評論和/或upvote。) – Deduplicator 2014-10-18 14:18:37

0

的* A = * B,意味着存儲在assinged到指針B的存儲內容將是指針的內容。

0

a=b:它b的值賦給一個

*a=*b:它賦予位於用b指出了由

良好的使用你問什麼指向的地址的內容可以說明在什麼如下:

#include<stdio.h> 

    void swapping(int *ptr_c, int *ptr_d) { 
     int tmp; 

     tmp = *ptr_c; 
     *ptr_c = *ptr_d; 
     *ptr_d = tmp; 
     printf("In function: %d %d\n", *ptr_c , *ptr_d); 
    } 

    int main(void) { 
     int a,b; 

     a=5; 
     b=10; 
     printf("input: %d %d\n", a, b); 
     swapping(&a,&b); 
     printf("output: %d %d\n", a, b); 
       return 0; 
    } 
+0

如何將b(即%p打印)的地址值放入某個點的地址? – 2014-10-18 14:01:45

+0

@ guotong1988'* a = * b' :) – 2014-10-18 14:03:21

相關問題