取消引用整数数组的指针

cha*_*par 12 c pointers

我有一个指向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.