Care este diferența dintre (int *)array (int *)&matrice, și &matrice într-un pointer misiune?

0

Problema

Am 3 linii de cod care îndeplinește exact aceleași, dar au o sintaxă diferită, codul de bază fiind:

    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));
    }

Pe linie pa = (int *)&arr;, Nu pot trece de acea linie pentru a (int *)array, (int *)&arrayși &array fără a întâmpina probleme, doar se confruntă cu un avertisment la ultima. Mă întrebam sintaxa corectă este și diferența dintre toate 3 dintre ele.

arrays c pointers
2021-11-24 05:02:40
2
0
  • Sintaxa corectă este pa = &arr[0]; și dacă vă aflați în nevoie de a adăuga o distributie, faci ceva gresit. Fără menajamente, dacă sunteți un începător, n-ar fi de turnare indicii vreodată.

  • pa = &arr nu "dau doar un avertisment", e invalid C. Acesta este un așa-numit violare de constrângere - invalid misiune de non-compatibile indicatorul de tipuri. Vă rugăm să studieze ceea Ce compilator opțiuni sunt recomandate pentru incepatori de învățare C? și de Ce trebuie un compilator C face atunci când se constată o eroare?

  • În mod similar, pa = (int *)&array este un invalid pointer de conversie între non-compatibile tipuri. Acesta va compila, dar are un compilator-rezultat specific. E strict vorbind cod incorect, dar pot lucra pentru compilator specific și de sistem.

  • pa = (int *)array este greșit din motive similare prea - deoarece array s-a descompus într-un pointer la matrice tip care nu este compatibil cu int*.

2021-11-24 10:23:55

Dacă am face pur și simplu pa = arr; dă-mi o "[Eroare] misiune de la incompatibil tip pointer". Când am întrebat-o pe profesoara mea despre ea, că este ceea ce mi-a arătat. Cum pot pur și simplu repara cu baza codului de mai sus?
Minh Nguyen

@MinhNguyen Ah my bad, n-am observat a fost o matrice 2D. Va actualiza răspunsul.
Lundin

Thankies,va face o notă de faptul că pentru data viitoare cand fac ceva de genul asta
Minh Nguyen
0

Două sfaturi:

  1. Adresa o matrice este adresa primului său element.
  2. Când tratat ca un pointer, o serie degradează într-un pointer la primul element

Deci,

  1. pa = arr;
    

    este echivalent cu

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

    Utilizați un typecast la tăcere de eroare, atunci când faci pa = (int *)arr;.

  2. pa = &arr;
    

    este echivalent cu

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

    Utilizați un typecast la tăcere de eroare, atunci când faci pa = (int *)&arr;.

Aceste typecasts nu sunt sigure. Dacă doriți să-l trateze ca pe un 1d array de int valori, cel mai bun să-l declare că prea.

2021-11-24 08:04:28

În alte limbi

Această pagină este în alte limbi

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