2011-01-27 50 views
2

我需要獲取內存地址和索引位,然後我需要輸出內存地址的索引。誰能幫忙?在printf如何在C中獲取內存地址並輸出它?

int x; 
int* addressOfX = &x; 

可以打印出來使用%p符地址:

+0

我試着用數組做的,但我不能把它做.. – Buckeye 2011-01-27 04:28:31

回答

14

鑑於任何C變量,你可以使用「地址的」運營商&其地址

printf("%p\n", &x); // Print address of x 

要訪問整數值的各個位,可以使用按位移位運算符以及按位AND來將想要的位移到適當位置,然後將其他位屏蔽掉。例如,爲了獲得x的第5位,你可以寫

int x; 
int fifthBit = (x >> 4) & 0x1; 

這下移數4位,留在第五位的LSB點。將此值與1(其中最低點爲1位,其他位爲0)將其他位全部屏蔽並返回值。例如:

int x = 31; // 11111 
prtinf("%d\n", (x >> 4) & 0x1); // Prints 1 
+2

+1比「閱讀指針」更有用,無論是否忠告。 – 2011-01-27 04:31:43

0

這爲我工作;)

// uses :: head 
    // ---------------------------------------------- 
    #include <stdio.h> 
    // ---------------------------------------------- 


    // func :: main 
    // ---------------------------------------------- 
    int main() 
    { 
     void *fooz = "bar"; 
     char addr[64]; 

     sprintf(addr, "%p", &fooz); 

     // do some stuff with `addr`, or not :) 
     puts(addr); 

     return 0; 
    } 
    // ---------------------------------------------- 

打印出像:〜> 0x7ffdfb91d698