|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
controllo del tipo di dato in C
ho la necessità di sapere se un argomento mandato da linea di comando è:
-un int -un float -un char esiste una funzione? |
![]() |
![]() |
![]() |
#2 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
Gli argomenti della riga di comando vengono sempre e solo trattati come array di stringhe, per l'esattezza puntatori a puntatori a char. Dovresti scrivere qualcosa di specializzato che opera sulle stringhe. Per semplici interi da char hai a disposizione la funzione atoi(). |
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Codice:
int main (char args, char *argv[]) {} /* che equivale a: */ int main (char args, **argv) {} In sostanza, (concedimi il beneficio del "niubbo"), se ho ben inteso il tuo suggerimento, l'approccio giusto sarebbe di pensare che: 1) Ho la certezza che qualsiasi argomento della riga di comando è di tipo char 2) E' mia cura pensare successivamente di convertirlo in un altro tipo di dato 3) In modo da poi gestire ed ottenere il controllo sul tipo di dato appena convertito. Thx. RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#4 | |||
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Codice:
int main(int argc, char *argv[]) Quote:
Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|||
![]() |
![]() |
![]() |
#5 | ||
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
![]() Quote:
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
||
![]() |
![]() |
![]() |
#6 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
|
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
![]() nel senso che allora i miei dubbi sono aumentati ![]() Leggendo la tua risposta, mi chiedo allora che senso ha dichiarare un puntatore con il tipo: Codice:
int *puntatore; char *puntatore; float *puntatore; Codice:
char variabile; char *puntatore; puntatore = &variabile; Spiego quello che mi è venuto in mente: Codice:
int x; char *puntatore; puntatore = &x ; Thx. PICCOLO EDIT: Cioè, semplificando, un puntatore alla fine comunque è una variabile, e come tale deve avere un tipo, quindi, se ho: char x, *y; io so che y potrà solo, nel caso mi interessi il valore, essere un tipo char. RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() Ultima modifica di RaouL_BennetH : 24-05-2005 alle 18:37. |
|
![]() |
![]() |
![]() |
#8 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
1) Rendere piu' leggibile il codice. 2) Avere un modo per stabilire su quali tipi di dato si andra' ad operare con il puntatore. 3) Realizzare ottimizzazioni per il compilatore che altrimnti non sarebbero possibili. 4) Forzare un corretto stile di programmazione. Tecnicamente non sei costretto a dichiarare i tipi per i puntatori. Puoi comunque dichiarare tutti i puntatori void ed effettuare un casting ogni volta che ne hai bisogno. Codice del tipo: Codice:
#include <stdio.h> int main(void) { void * ptr; char ch = 'a'; ptr = (char *)&ch; return 0; } |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Grazie per la chiarissima risposta
![]() (mi scuso con l'autore del 3d se per colpa mia stiamo andando un pò OT) Capisco quindi a cosa serve quando il puntatore dovrà eventualmente contenere il valore della variabile puntata. Giustamente, averlo "tipizzato" allo stesso modo della variabile puntata, è molto più preciso e corretto. THX""" RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#10 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Dimenticavo, il tipizzare i puntatori e' anche un modo per dare accesso al compilatore per dereferenziare un valore.
Sebbene non eccessivamente intuitivo con i tipi elementari, questo concetto diventa evidente quando devi dereferenziare per esempio delle strutture |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:40.