Latest web development tutorials

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 允许函数返回指针到局部变量、静态变量和动态内存分配。