C Pointer
Imparare puntatore del linguaggio C facile e divertente. Attraverso un puntatore, è possibile semplificare l'attuazione di alcune delle attività di programmazione C, ci sono alcuni compiti, come allocazione dinamica della memoria, senza puntatore è inapplicabile. Quindi, voglio diventare un buon programmatore C, i puntatori di apprendimento sono necessari.
Come sapete, ogni variabile ha una posizione di memoria, ogni locazione di memoria definisce l'operatore di indirizzo di accesso è possibile utilizzare il trattino (&), che rappresenta un indirizzo nella memoria. Considerate i seguenti esempi, che definiranno l'indirizzo variabile di uscita:
#include <stdio.h> int main () { int var1; char var2[10]; printf("var1 变量的地址: %x\n", &var1 ); printf("var2 变量的地址: %x\n", &var2 ); return 0; }
Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:
var1 变量的地址: bff5a400 var2 变量的地址: bff5a3f6
A titolo di esempio di cui sopra, si capisce che cosa un indirizzo di memoria e come accedervi. Diamo un'occhiata a quello che è un puntatore.
Che cosa è un puntatore?
Un puntatore è una variabile il cui valore è l'indirizzo di un'altra variabile, vale a dire, l'indirizzo diretto della locazione di memoria.Prima Come altre variabili o costanti, è necessario utilizzare un indirizzo di memoria puntatore di altre variabili, si dichiara. La forma generale di una dichiarazione di variabile puntatore è:
type *var-name;
Qui tipo è un puntatore al tipo base, deve essere una valida tipo didatiC,var-name è il nome della variabile puntatore. Viene utilizzato per dichiarare un puntatore asterisco * moltiplicazione utilizzare l'asterisco è lo stesso. Tuttavia, in questa dichiarazione, l'asterisco viene utilizzato per specificare un puntatore variabile. Quanto segue è una dichiarazione puntatore valido:
int *ip; /* 一个整型的指针 */ double *dp; /* 一个 double 型的指针 */ float *fp; /* 一个浮点型的指针 */ char *ch /* 一个字符型的指针 */
Tutti i puntatori attuale tipo di dati del valore, se si tratta di un numero intero, float, string, o altri tipi di dati sono gli stessi, è un numero esadecimale rappresenta un indirizzo di memoria lunga. L'unica differenza tra i diversi tipi di puntatore di dati, il puntatore è una tipi di dati variabili o costanti.
Come utilizzare il puntatore?
Frequentemente utilizzare il puntatore quando le seguenti azioni: per definire una variabile puntatore, l'indirizzo variabile assegnata al puntatore, l'accesso il valore degli indirizzi disponibili variabile puntatore. Questo viene fatto utilizzando l'operatore unario* per tornare in cui si trova l'indirizzo operando specificato il valore della variabile.I seguenti esempi si riferiscono a queste azioni:
#include <stdio.h> int main () { int var = 20; /* 实际变量的声明 */ int *ip; /* 指针变量的声明 */ ip = &var; /* 在指针变量中存储 var 的地址 */ printf("Address of var variable: %x\n", &var ); /* 在指针变量中存储的地址 */ printf("Address stored in ip variable: %x\n", ip ); /* 使用指针访问值 */ printf("Value of *ip variable: %d\n", *ip ); return 0; }
Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:
Address of var variable: bffd8b3c Address stored in ip variable: bffd8b3c Value of *ip variable: 20
Il puntatore C NULL
Al momento della dichiarazione delle variabili, se non può essere assegnato l'indirizzo esatto, assegnare un valore NULL per la variabile puntatore è una buona pratica di programmazione. Fu valore NULL pointer è chiamato un puntatorenullo.
Un puntatore NULL è definita nella libreria standard zero costanti. Si consideri il seguente programma:
#include <stdio.h> int main () { int *ptr = NULL; printf("ptr 的值是 %x\n", ptr ); return 0; }
Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:
ptr 的值是 0
Nella maggior parte dei sistemi operativi, il programma non consente l'accesso a indirizzo di memoria 0, perché la memoria è riservata per il sistema operativo. Tuttavia, l'indirizzo di memoria 0 ha un significato speciale, indica che il puntatore non punta a una posizione di memoria accessibile. Ma secondo la convenzione, se il puntatore contiene un valore nullo (valore zero), si presume che non punta a nulla.
Per verificare la presenza di un puntatore nullo, è possibile utilizzare l'istruzione if, come segue:
if(ptr) /* 如果 p 非空,则完成 */ if(!ptr) /* 如果 p 为空,则完成 */
puntatore C dettagliate
In C, ci sono molti puntatori concetti relativi che sono molto semplici, ma molto importante. Di seguito sono elencati alcuni concetti importanti connessi con il puntatore programmatori C devono essere chiare:
概念 | 描述 |
---|---|
指针的算术运算 | 可以对指针进行四种算术运算:++、--、+、- |
指针数组 | 可以定义用来存储指针的数组。 |
指向指针的指针 | C 允许指向指针的指针。 |
传递指针给函数 | 通过引用或地址传递参数,使传递的参数在调用函数中被改变。 |
从函数返回指针 | C 允许函数返回指针到局部变量、静态变量和动态内存分配。 |