之间的区别是什么(int*)阵列,(int*)&阵列,并&阵列中的指针转让?

0

的问题

我有3行的代码,其执行完全相同的,但具有不同的语法,基码是:

    int a, b;
    printf("Enter the size of your array [a][b]: ");
    scanf("%d %d", &a, &b);
    int arr[a][b];

    int *pa;

    pa = (int *)&arr;
     
    for (i = 0; i < a*b; i++)
    {
        printf("[%d] [%d] = ", i/b, i%b);
        scanf("%d", (pa + i));
    }

上线 pa = (int *)&arr;我可以交换线 (int *)array, (int *)&array&array 没有遇到任何问题,只有在经历一个警告在最后一个。 我想知道正确的语法和之间的差异所有3。

arrays c pointers
2021-11-24 05:02:40
2
0
  • 正确的语法 pa = &arr[0]; 如果你发现自己处于需要增加一个铸,你正在做的事情是错误的。 直言不讳地说,如果你是初学者,你不应该被铸造的指针。

  • pa = &arr 不"只给个警告",这是无效的,这是一个所谓的约束,违反了无效的分配的非兼容的指针的类型。 请研究 什么编译器的选择建议,对于初学者的学习C? 什么必须C编译器做的时候,它发现一个错误?

  • 同样地, pa = (int *)&array 是无效的指针转换之间不兼容的类型。 它将编纂,但有一个编译器的具体结果。 这严格来讲不正确的代码,但可能工作的具体编译器和系统。

  • pa = (int *)array 是错误的,对于类似的原因-因为 array 已经腐烂成一个指阵型这是不兼容 int*.

2021-11-24 10:23:55

如果我只是做pa=arr;它给我一个"[错误]分配从不相容的指针型"。 当我问我的老师,那是什么他给我。 我如何简单的解决,与我的基础上述代码?
Minh Nguyen

@MinhNguyen啊我不好,我没注意这是一个2D阵列。 将更新的答复。
Lundin

Thankies,将会使注意到,下一次我做点什么样的
Minh Nguyen
0

两个关键的新闻:

  1. 地址的一系列是该地址的第一个元素。
  2. 当视为指针,一系列降低成一个指向它的第一个元素

所以,

  1. pa = arr;
    

    相当于

    pa = &(arr[0]);   // Type mismatch: RHS is int (*)[b]
    

    你使用一种类型转换的沉默时的错误做 pa = (int *)arr;.

  2. pa = &arr;
    

    相当于

    pa = &(arr[0]);   // Type mismatch: RHS is int (*)[b]
    

    你使用一种类型转换的沉默时的错误做 pa = (int *)&arr;.

这些类型转化不安全。 如果你想要把它作为一个1d列 int 值,最好的,宣布这种方式。

2021-11-24 08:04:28

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................