指向指针地址的指针
pointer to pointer address
我有一个关于指针的问题。
这是我的代码
#include <stdio.h>
void main()
{
int num=10;
int *numPtr1;
int **numPtr2;
numPtr1 = #
numPtr2 = &numPtr1;
printf("%d\n", num);
printf("%d\n", *numPtr1);
printf("%d\n", **numPtr2);
printf("%p\n", &num);
printf("%p\n", numPtr1);
printf("%p", numPtr2);
}
为什么numPtr2的地址和numPtr1、numPtr2的地址不一样?
例如,设 num 的地址为 0x7fffaca780b4。然后当我 运行 这段代码时,输出是
10
10
10
0x7fffaca780b4
0x7fffaca780b4
0x7fffaca780b8
抱歉我的英语不好
numPtr1
和 numPtr2
是两个不同的变量。因此,无论它们指向何处,这些变量所在的位置都会有所不同。
Why numPtr2's address is not the same with numPtr1, numPtr2?
每个变量在内存中都有自己的地址,所以它们的内容可能相同但它们的地址不能相同否则会无法区分它们。
numptr2
指向 numptr1 变量,numptr1 指向 num。
所以在numptr2
中将存储numptr1的地址&在numptr1
中将存储num的地址
(numptr1,num)
个地址不同。
这就是您获得不同地址的原因。
关于[num]
[num] 的值 = 10
[num] 的内存位置 = 0115FC14
关于 [numPtr1]
[numPtr1] 取消引用时的值 = 10
[numPtr1] 的地址持有 = 0115FC14
[numPtr1] 的内存位置 = 0115FC08
关于 [numPtr2]
[numPtr2] 取消引用一次时的值 = 0115FC14(*numPtr2)
[numPtr2] 两次取消引用时的值 = 10(**numPtr2)
[numPtr2] 的地址 = 0115FC08(numPtr2) 等于 [numPtr1] 的内存位置 = 0115FC08(&numPtr1)
[numPtr2] 的内存位置 = 0115FBFC
Name
num
numPtr1
numPtr2
Value
10
0115FC14
0115FC08
Memory location
0115FC14
0115FC08
0115FBFC
这是代码
#include <stdio.h>
int main(void)
{
int a = 5;
int* a_ptr1 = &a;
int** a_ptr2 = &a_ptr1;
puts("***About [a]***");
printf("value of [a] = %d\nmemory location of [a] = %p\n\n", a, &a);
puts("***About [a_ptr1]***");
printf("value of [a_ptr1] when it dereferenced = %d\n", *a_ptr1);
printf("address of [a_ptr1] is holding = %p\n", a_ptr1);
printf("memory location of [a_ptr1] = %p\n\n", &a_ptr1);
puts("***About [a_ptr2]***");
printf("value of [a_ptr2] when it dereferenced once = %p(*a_ptr2)\n", *a_ptr2);
printf("value of [a_ptr2] when it dereferenced twice = %d(**a_ptr2)\n", **a_ptr2);
printf("address of [a_ptr2] holding = %p(a_ptr2) ", a_ptr2);
printf("is equals to memory location of [a_ptr1] = %p(&a_ptr1)\n", &a_ptr1);
printf("memory location of [a_ptr2] = %p\n\n", &a_ptr2);
printf("Name\t\t[a]<---------[a_ptr1]<-------[a_ptr2]\n");
printf("Value\t\t%d %p %p\n", a, a_ptr1, a_ptr2);
printf("Address\t\t%p %p %p\n", &a, &a_ptr1, &a_ptr2);
}
我有一个关于指针的问题。
这是我的代码
#include <stdio.h>
void main()
{
int num=10;
int *numPtr1;
int **numPtr2;
numPtr1 = #
numPtr2 = &numPtr1;
printf("%d\n", num);
printf("%d\n", *numPtr1);
printf("%d\n", **numPtr2);
printf("%p\n", &num);
printf("%p\n", numPtr1);
printf("%p", numPtr2);
}
为什么numPtr2的地址和numPtr1、numPtr2的地址不一样? 例如,设 num 的地址为 0x7fffaca780b4。然后当我 运行 这段代码时,输出是
10
10
10
0x7fffaca780b4
0x7fffaca780b4
0x7fffaca780b8
抱歉我的英语不好
numPtr1
和 numPtr2
是两个不同的变量。因此,无论它们指向何处,这些变量所在的位置都会有所不同。
Why numPtr2's address is not the same with numPtr1, numPtr2?
每个变量在内存中都有自己的地址,所以它们的内容可能相同但它们的地址不能相同否则会无法区分它们。
numptr2
指向 numptr1 变量,numptr1 指向 num。
所以在numptr2
中将存储numptr1的地址&在numptr1
中将存储num的地址
(numptr1,num)
个地址不同。
这就是您获得不同地址的原因。
关于[num]
[num] 的值 = 10
[num] 的内存位置 = 0115FC14
关于 [numPtr1]
[numPtr1] 取消引用时的值 = 10
[numPtr1] 的地址持有 = 0115FC14
[numPtr1] 的内存位置 = 0115FC08
关于 [numPtr2]
[numPtr2] 取消引用一次时的值 = 0115FC14(*numPtr2)
[numPtr2] 两次取消引用时的值 = 10(**numPtr2)
[numPtr2] 的地址 = 0115FC08(numPtr2) 等于 [numPtr1] 的内存位置 = 0115FC08(&numPtr1)
[numPtr2] 的内存位置 = 0115FBFC
Name | num | numPtr1 | numPtr2 |
---|---|---|---|
Value | 10 | 0115FC14 | 0115FC08 |
Memory location | 0115FC14 | 0115FC08 | 0115FBFC |
这是代码
#include <stdio.h>
int main(void)
{
int a = 5;
int* a_ptr1 = &a;
int** a_ptr2 = &a_ptr1;
puts("***About [a]***");
printf("value of [a] = %d\nmemory location of [a] = %p\n\n", a, &a);
puts("***About [a_ptr1]***");
printf("value of [a_ptr1] when it dereferenced = %d\n", *a_ptr1);
printf("address of [a_ptr1] is holding = %p\n", a_ptr1);
printf("memory location of [a_ptr1] = %p\n\n", &a_ptr1);
puts("***About [a_ptr2]***");
printf("value of [a_ptr2] when it dereferenced once = %p(*a_ptr2)\n", *a_ptr2);
printf("value of [a_ptr2] when it dereferenced twice = %d(**a_ptr2)\n", **a_ptr2);
printf("address of [a_ptr2] holding = %p(a_ptr2) ", a_ptr2);
printf("is equals to memory location of [a_ptr1] = %p(&a_ptr1)\n", &a_ptr1);
printf("memory location of [a_ptr2] = %p\n\n", &a_ptr2);
printf("Name\t\t[a]<---------[a_ptr1]<-------[a_ptr2]\n");
printf("Value\t\t%d %p %p\n", a, a_ptr1, a_ptr2);
printf("Address\t\t%p %p %p\n", &a, &a_ptr1, &a_ptr2);
}