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

时间:2015-04-12 23:42:46

标签: c pointers

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. 我不明白& number和nPointer的输出值之间的区别。他们的意思是什么?
  2. * p和x的地址?
  3. * nPointer和nPointer以及& nPointer之间的区别?
  4. 总的来说,这些是如何连接的?显然他们只是如何以及为什么?

3 个答案:

答案 0 :(得分: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的值”与“{1}}的地址”相同。指针的值是它指向的对象的地址。

答案 1 :(得分:0)

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

& number表示变量' number'的地址。在记忆中。

' nPointer'是一个整数指针,因为你声明它是' int * nPointer'

整数指针将存储一个'整数的地址。变量

所以当你这样做时,' nPointer =& number' ,nPointer将存储变量'数字'。

的地址

地址* p是存储在p。

中的值

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

nPointer是一个普通的整数变量。

& nPointer读作:变量nPointer的地址

答案 2 :(得分:0)

假设以下声明和初始化:

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

然后以下是真的:

*nPointer ==  number == 30
 nPointer == &number == address of the number variable
&nPointer            == address of the nPointer variable