2015-04-12 37 views
-3

所有涉及指针的值和地址之间有什么区别?

int main(){ 
 

 
    int number = 30; 
 
    int* nPointer = NULL; 
 

 
    nPointer = &number; 
 

 
    printf("number:\n"); 
 
    printf("Value of number: %d \n", number); 
 
    printf("Value of &number: %d \n", &number); 
 
    printf("Address of number: %x \n", number); 
 
    printf("Address of &number: %x \n\n", &number); 
 

 
    printf("nPointer:\n"); 
 

 
    printf("Value of nPointer: %d\n", nPointer); 
 
    printf("Value of &nPointer: %d \n", &nPointer); 
 
    printf("Value of *nPointer: %d \n", *nPointer); 
 

 
    printf("Address of nPointer: %x\n", nPointer); 
 
    printf("Address of &nPointer: %x \n", &nPointer); 
 
    printf("Address of *nPointer: %x \n", *nPointer); 
 

 
    return 0; 
 

 

 
}
新手编程!

  1. 我不明白&号码和nPointer的输出值之间的差异。他们的意思是什么?
  2. * p和x的地址?
  3. * nPointer和nPointer之间的区别和& nPointer?

总的来说,它们是如何连接的?显然他们是如何以及为什么?

+1

阅读一些“相关“侧边栏 –

+0

'%x'中的问题并不意味着你说的意思。它只是一个格式说明符,它无法检索地址。 –

回答

3

您的大部分代码都会导致undefined behaviour。使用printf函数,您必须提供与参数类型对应的格式说明符。它不会自动转换为您。

此外,大部分文字说明与代码不符。

这里是固定的未定义行为的代码,并在评注固定:

int main() 
{ 
    int number = 30; 
    int* nPointer = &number; 

    printf("number:\n"); 
    printf("Value of number (base 10): %d \n", number); 
    printf("Value of &number: %p \n", (void *) &number); 
    printf("Value of number (base 16): %x \n", number); 

    printf("nPointer:\n"); 

    printf("Value of nPointer: %p\n", (void *) nPointer); 
    printf("Value of &nPointer: %p \n", (void *) &nPointer); 
    printf("Value of *nPointer (base 10): %d \n", *nPointer); 

    // last section redundant as it prints the same values but with wrong commentary 

    return 0; 
} 

void *是必要的,因为有不同类型的指针,并%p只知道void *。 (在普通系统上,如果没有它,可能会逃脱,因为普通系统对所有指针使用相同的格式)。

&x的值”是指与“x的地址”相同的东西。指针的值是它指向的对象的地址。

0

变量(如int nPointer)存储在内存中。内存是内存地址的集合。

&数字表示内存中变量'number'的地址。

“nPointer”是一个整数指针,因为你宣布它为“诠释* nPointer”

整数指针将存储“整数”变量的地址。

因此,当你这样做时,'nPointer = &数字',nPointer将存储变量'数字'的地址。

* p的地址是存储在p中的值。

* nPointer被读为:存储在nPointer中的地址值。

nPointer是一个正常的整数变量。

& nPointer读作:可变nPointer的地址

0

假设下面的声明和初始化:

int number = 30; 
int *nPointer = &number; 

然后满足下列条件:

*nPointer == number == 30 
nPointer == &number == address of the number variable 
&nPointer   == address of the nPointer variable 
相关问题