Curiosità in C

venerdì 28 maggio 2010 - 17.49

luigidibiasi Profilo | Guru

Salve ragazzi,
qualcuno potrebbe tradurmi (Se possibile) lo contenuto della funzione ax in modo da utilizzare unicamente i puntatori senza dover usare quel z[0]


// TestPointer.cpp : definisce il punto di ingresso dell'applicazione console. // #include "stdafx.h" #include "windows.h" void ax(int* **z) { z[0] = (int**) malloc(sizeof(int**)); int j; // crea spazio per 10 interi for (j=0;j<10;j++) { z[0][j] = (int*) malloc(sizeof(int*)); z[0][j]=&j; } for (j=0;j<10;j++) { printf("%i\n",*z[0][j]); } } int _tmain(int argc, _TCHAR* argv[]) { int** a=NULL; ax(&a); return 0; }

Io ho provato ad usare :

*z = (int**) malloc(sizeof(int**));
e nel ciclo:

*z[j] = (int*) malloc(sizeof(int*));
*z[j]=&j;

ma mi ritrovo una violazione di accesso... come mai??
Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

aiedail92 Profilo | Expert

Ciao,

È una questione di precedenza degli operatori e associatività: *z[j] significa *(z[j])

Per farlo funzionare devi forzare la precedenza con le parentesi:

(*z)[j] = (int*)malloc(sizeof(int*)); (*z)[j] = &j;

Luca

luigidibiasi Profilo | Guru

chiaro come il sole grazie!
Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5