gpt4 book ai didi

c - 为什么数组指针的地址与该指针中存储的数据相同?

转载 作者:行者123 更新时间:2023-12-01 12:09:53 24 4
gpt4 key购买 nike

如果你尝试那段代码

#include<stdio.h> int main() { 


// Pointer to an integer
int *p;

// Pointer to an array of 5 integers
int (*ptr)[5];
int arr[] = { 3, 5, 6, 7, 9 };

// Points to 0th element of the arr.


// Points to the whole array arr.
ptr = &arr;

printf("p = %p, address of P = %p\n", p, &p);
return 0; }

你会得到类似 p = 0x7fff8e9b4370, P address = 0x7fff8e9b4340 的信息
这意味着指针 P 的地址是一个东西,它里面的数据是另一个

但是如果你像这样对数组的指针进行同样的尝试
#include<stdio.h> int main() { 


// Pointer to an integer
int *p;

// Pointer to an array of 5 integers
int (*ptr)[5];
int arr[] = { 3, 5, 6, 7, 9 };

// Points to 0th element of the arr.
p = arr;

// Points to the whole array arr.
ptr = &arr;

printf("arr = %p, arr address = %p\n", arr, &arr);
return 0; }

你会得到类似 arr = 0x7ffda0a04310, arr address = 0x7ffda0a04310 的信息

那么为什么指针数据与内存中的指针地址相同?!!当我们取消引用 arr 指针的地址时,我们应该得到数字 3,但据我所知,这是地址位置 0x7ffda0a04310内存中有 0x7ffda0a04310作为数据

所以我错在哪里?

最佳答案

打印p表示打印 p的值,而 p的值是整数的地址或整数数组的地址。

打印&p表示您打印 p 的位置在内存上。

打印arr将显示数组第一个元素的地址,它是 &arr[0] .

打印&arr将显示内存中 arr 的位置,它也是数组第一个元素的地址

所以打印p打印会有所不同&p .arr&arr是不同的类型,但它会给你相同的结果。

关于c - 为什么数组指针的地址与该指针中存储的数据相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52712087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com