【问题标题】:In C Language, What is difference between (name of array) and &(name of array)? [duplicate]在C语言中,(数组名)和&(数组名)有什么区别? [复制]
【发布时间】:2019-06-01 20:25:45
【问题描述】:
int main() {
    int arr[3] = { 1,3,5 };
    int * ptr1 = arr;   
    int * ptr2 = &arr; //  warning C4047: reference level between int * and int (*)[3] is different
    return 0;
}

我知道'arr'是指具有数组'arr'的起始地址值的指针。此外,它是一个不可变的指针值。那么,'&arr'不就是指针'arr'的地址吗?

【问题讨论】:

    标签: c arrays pointers


    【解决方案1】:

    是的,但类型不同。

    对于像

    这样定义的数组
    int arr[3] = { 1,3,5 };
    

    在大多数情况下,arr 衰减到指向数组中第一个元素的指针,在这种情况下,它的类型为 int *。所以,对于语句

    int * ptr1 = arr;

    LHS 和 RHS 属于同一类型。

    另一方面,&arr 是一个指向 3 个ints 数组的指针,换句话说,它的类型为int (*)[3]。通过说

    int * ptr2 = &arr; 
    

    您正在尝试将其分配给int *。它们不是兼容的类型。因此发出警告。

    【讨论】:

    • 我认为这个答案适合我的情况谢谢!!
    猜你喜欢
    • 2013-07-03
    • 1970-01-01
    • 2018-05-08
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2015-07-20
    相关资源
    最近更新 更多