我正在尝试使用c指针,无法解释以下代码:
int main()
{
int i = -3;
int *ptr;
int **ptr2;
int ***ptr3;
ptr = &i;
ptr2 = &ptr;
ptr3 = &ptr2;
printf("ptr = %p\n",(void *)ptr);
printf("&ptr = %p\n",(void *)&ptr);
printAddr(&ptr);
printAddr2(&ptr2);
printAddr3(&ptr3);
return 0;
}
void printAddr(int **num)
{
printf("address of int ** = %p\n", (void *)&num);
}
void printAddr2(int ***num)
{
printf("address of int *** = %p\n", (void *)&num);
}
void printAddr3(int ****num)
{
printf("address of int **** = %p\n", (void *)&num);
}输出如下:
ptr = 0xbf9d64a0
&ptr = 0xbf9d64a4
address of int ** = 0xbf9d6490
address of int *** = 0xbf9d6490
address of int **** = 0xbf9d6490我的疑问是,为什么要使用(address(int)) == address(address(address(int)))?
非常感谢你的澄清。
我发现这个问题是相关的:
但作者明确表示它们是相等的。
发布于 2012-11-26 08:00:15
void printAddr(int **num)
{
printf("address of int ** = %p\n",(void *)&num);
}它打印出函数接收到的传入值的副本的地址。这些函数很可能都分配在堆栈上的同一位置,因为所有这些函数只有一个参数,并且在调用之间不会发生分配。
如果要在main中查看指针的地址,则应直接在main中打印它们或使用函数
void printAddress(void* p) {
printf("%p\n", p);
}并使用以下命令调用
printAddress(&ptr3);等。
https://stackoverflow.com/questions/13556925
复制相似问题