在取消引用指向数组的指针时,我得到的地址与指向数组的指针的地址相同
While dereferencing pointer to an array I am getting same address as that of pointer to an array
#include<stdio.h>
int main(void)
{
int arr[5]={1,2,3,4,5};
int (*ptr)[5]=&arr;
printf("ptr=%p\n",ptr); i am not getting the diff btw both statements
printf("*ptr=%p\n",*ptr);
return 0;
}
output:-
ptr=0xbf8f8178
*ptr=0xbf8f8178
我知道取消引用指向数组的指针我们得到数组名,数组名表示基地址那么这两个语句之间的区别是什么
两个指针地址相同,但类型不同
ptr
是指向 5 个整数的数组的指针。
*ptr
是一个包含 5 个整数的数组。但是,当 "array of T" 类型的表达式用于除 sizeof
或 &
之外的任何上下文时,它会自动转换为 "pointer to T" 类型的表达式,指向数组的第一个元素。在这种情况下,它变成了指向 int.
的指针
显然,数组的起始地址与其第一个元素相同。
printf 中的第一个指针是指向指针的指针
printf 中的第二个指针指向第一个指针指向的第一个元素
但是两个指针的类型不同
查看此图片
#include<stdio.h>
int main(void)
{
int arr[5]={1,2,3,4,5};
int (*ptr)[5]=&arr;
printf("ptr=%p\n",ptr); i am not getting the diff btw both statements
printf("*ptr=%p\n",*ptr);
return 0;
}
output:-
ptr=0xbf8f8178
*ptr=0xbf8f8178
我知道取消引用指向数组的指针我们得到数组名,数组名表示基地址那么这两个语句之间的区别是什么
两个指针地址相同,但类型不同
ptr
是指向 5 个整数的数组的指针。
*ptr
是一个包含 5 个整数的数组。但是,当 "array of T" 类型的表达式用于除 sizeof
或 &
之外的任何上下文时,它会自动转换为 "pointer to T" 类型的表达式,指向数组的第一个元素。在这种情况下,它变成了指向 int.
显然,数组的起始地址与其第一个元素相同。
printf 中的第一个指针是指向指针的指针
printf 中的第二个指针指向第一个指针指向的第一个元素
但是两个指针的类型不同
查看此图片