我有一个指向10的整数数组的指针.取消引用这个指针应该给我什么?
例如:
#include<stdio.h>
main()
{
int var[10] = {1,2,3,4,5,6,7,8,9,10};
int (*ptr) [10] = &var;
printf("value = %u %u\n",*ptr,ptr); //both print 2359104. Shouldn't *ptr print 1?
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*itb 15
您取消引用的是指向数组的指针.因此,解除引用会为您提供数组.将数组传递给printf(或任何函数)会传递第一个元素的地址.
你告诉printf你传递一个unsigned int(%u),但实际传递的是一个int*.您看到的数字是解释为unsigned int的数组的第一个元素的地址.
当然,这是未定义的行为.如果要打印地址,则必须使用%p并传递void*.
Adi*_*gal 11
当你申报时
int var[10];
Run Code Online (Sandbox Code Playgroud)
对int的var类型指针 的引用(链接到C Faq Relevant的部分).
引用&var是指向 10个int 的数组的指针.
你的声明int (*ptr) [10]正确地创建了一个指向你指定&var的10个int数组的指针(指向10个int的数组的指针的地址)(链接到C Faq Relevant的部分).
有了这些东西,希望清楚,ptr然后将指针的基地址打印到 10个整数的数组.
*ptr然后将打印的第一个元素的地址的10个整数数组.
在这种情况下,它们都是相同的,这就是为什么你看到相同的地址.
是的, **ptr would give you 1.