C punteros notas

puntero


tipos de puntero

XX Tipo + * → XX tipo de puntero

int *   conformación tipo de puntero

char *  Char tipo de puntero

 

variable de puntero

puntero variable es una declaración de puntero tipo de variable

int a; // declara una variable de número entero

int * a; // declarar un puntero a una variable de número entero

 

asignación variable de puntero

variable de puntero se almacena en la dirección de memoria de un principio de asignación de variable: ¿Qué tipo de variable de puntero, se le debe dar la dirección del valor de la variable del tipo correspondiente:

① int * p = 0x40003a04; // fácil interpretación

② int a; Char b = 'B'; int * p1 = & a; char * p2 = & b;

 

dirección de memoria

medios de memoria RAM en un lugar determinado, generalmente expresada en números hexadecimales, como 0x40003a04;

En el 32-bit CPU , la dirección es un 32 número entero bits sin signo, puede representar 2 ^ 32 (4 GB) de direcciones.

 

puntero de la naturaleza

Independientemente del tipo de puntero, la dirección debe ser almacenado, que apunta a la dirección de la variable correspondiente, y el valor de la dirección es un 32 número entero bits sin signo, cualquier tipo de tamaño del puntero es de 4 bytes;

tipo de puntero → unsigned int

 

tipo de puntero común

tipo

En t

carbonizarse

flotador

doble

struct A {int a; int b;}

func vacío ()

tipos de puntero

En t*

carbonizarse*

flotador*

doble*

struct A *

typedef void (* pFunc) ()

 

Definir e inicializar el puntero

int * p1 = NULL;

char * p1 = NULL;

flotar * p1 = NULL;

doble * p1 = NULL;

 

asignación variable de puntero

int a = 5; int * p1 = & a;

 

Obtener el valor de la variable de puntero hace referencia la variable

Uso * Obtener el valor de la variable de puntero

printf ( “% d”, * p1);

 

* Los dos usos

Tipo *

tipos de puntero

* Variable de puntero

Recogida del puntero indica el valor de la variable

 

Pointer tipo de estructura tipo

tipo

struct A {int a; int b;}

tipos de puntero

struct A *

variable de puntero definición de la estructura

struct A * p = NULL;

La obtención de la dirección de la variable de estructura

struct A {int a; int b;};

struct A a;

printf ( “% p”, y a);

 

Uso * estructura de obtener el valor variable de puntero

struct A {int a; b int; };

struct A a = {5, 6};

struct A * p = & a;

printf ( “% d,% d”, (* p) .a, (* p) .b);

El uso de los miembros de la estructura variable de puntero de acceso

Por -> referencia a una estructura de variables miembro

struct A {int a; b int; };

struct A a = {5, 6};

struct A * p = & a;

printf ( “% d,% d”, p-> a, p-> b);

 

 

puntero de función: Puntero símbolo * delante del nombre de la función

Función: FUNC void () {printf ( "FUNC \ n");}

 

Dirección de la función

Para el nombre de la función, que es la primera dirección, la misma dirección para tomar los dos siguientes:

printf ( “% p \ n”, func);

printf ( “% p \ n”, y func);

 

Función tipo de puntero , sin typedef representa define una variable de puntero de función

prototipo de función

func vacío ()

tipos de puntero

typedef void (* pFunc) ()

 

asignación de puntero de función

pFunc p = func; o pFunc p = & func;

Llame a la función utilizando las variables de puntero de función

pFunc p = func;

p (); // llama func función

 

puntero de función compleja

int (* (* p) (int)) (int);

p.ej. int typedef (* (* pFunc3) (int)) (int);

pFunc3 FUNC3 = func;

 

puntero salvaje

Un área de memoria del puntero ilegal

puntos a la memoria ha sido destruida

punto no tiene memoria de acceso

①int * p = (int *) malloc (int);

libre (p); // este tiempo p cuando el campo se ha convertido en un puntero, luego tomar el valor de la dirección, la distorsión

azar p puntos a un área de memoria de desconocido incertidumbre; causarían una memoria para ser modificado, causando sutiles ERROR o de sistema se bloquea

 

Evitar colgando punteros

puntero inicializar la aplicación: int * P = NULL ;

liberado después el puntero de memoria se establece en NULL : libre (P); P = NULL;

 

Pointer aritmética: adición / sustracción

Además Pointer: Pointer + N : muestra un valor de puntero más N * sizeof ( tipo ) bytes

Que usted le

↑ ↑

int * p p + 3

Además Puntero: ++ puntero: muestra un valor de puntero más sizeof ( tipo ) bytes, después de ejecutar el puntero p cambios de valor

Que usted le

 ↑ ↑

int * p ++ p

Pointer resta método: puntero -N : muestra un valor de puntero menos el N * sizeof ( tipo ) bytes

Que usted le

↑ ↑

p-3 int * p

Pointer resta método: - Puntero: el puntero indica el valor obtenido restando sizeof ( tipo ) bytes, después de ejecutar el puntero p cambios de valor

Que usted le

↑ ↑

-P int * p

 

Puntero - Puntero: indica el número de dos bytes obtenidos restando el valor de la dirección: P2 = P1 3-.

Que usted le

↑ ↑

int * * p2 p1 int

 

One-dimensional array

int a [5] = {1,2,3,4,5 }; ocupa un espacio de memoria contigua, cada valor en la matriz de un byte;

Primera dirección matriz unidimensional es una matriz de nombre o la dirección del primer elemento;

int a [5] = {1,2,3,4,5};

int * p = a;

int * p = & a [0];

 

La diferencia entre el nombre del puntero y la matriz

tipo

si la variable

calculable

nombre de la matriz

Inmutable, es una constante

Incapaz ++ , -

puntero

Puede cambiar, es variable

Puede ++ , -

 

Utilizar punteros a elementos de la matriz de acceso

for (int i = 0; i <5; i ++)

{

printf ( “% d \ n”, * (p + i));

}

 

for (int i = 0; i <5; i ++)

{

printf ( “% d \ n”, * (p ++));

}

 

for (int i = 0; i <5; i ++)

{

printf ( "% d \ n" , * (a + i)); // nombre de la matriz es una constante, no cambiar, mediante la adición de i valor de desplazamiento, no de la resta

}

 

matriz bidimensional

int a [2] [3] = {{1,2,3}, {4,5,6}};

a [0] 1 2 3

a [1] 4 5 6

Primera dirección matriz bidimensional es una matriz de nombre o la dirección del primer elemento;

 

Definido puntero matriz bidimensional

Point matriz bidimensional de punteros: puntero de fila → tipo (* p) [N]

int a [2] [3] = {{1,2,3}, {4,5,6}};

int (* p) [3];

p = a; // asignar un nombre de matriz

p = & a [0]; // puntero a la primera dirección del primer elemento

 

Utilizar punteros de acceso a una matriz bidimensional de elementos

for (int i = 0; i <2; i ++)

for (int j = 0; j <3; j ++)

{Printf ( “% d \ n”, p [i] [j]); }

 

for (int i = 0; i <2; i ++)

for (int j = 0; j <3; j ++)

{Printf ( "% d \ n ", * (p [i] + j));} // p [i] representante del puntero de fila, el p [i] visto como un nombre de matriz

 

for (int i = 0; i <2; i ++)

for (int j = 0; j <3; j ++)

{Printf ( “% d \ n”, * (* (p + i) + j)); }

 

a [m] [n] es indicación equivalente

tipo

las definiciones de puntero

asignación

puntero de fila

int (* p) [N]

a & a [N]

punteros ordinarios

En t*

un [N] & a [M] [N]

 

Las constantes de cadena es en sí misma una dirección

hola guardará en la memoria hola \ 0

Las constantes de cadena esencia es una sección de la memoria, la primera dirección para identificar, y el valor de las constantes de cadena no se puede cambiar

 

puntero de cadena

char * p = "Hola"; no utiliza P = [1.] 'A'; cambiar el contenido de

Impartir a la cadena variable de puntero constantes primera dirección;

for (int i = 0; i <5; i ++)

{Printf ( “% c \ n”, p [i]); }

 

for (int i = 0; i <5; i ++)

{Printf ( “% c \ n”, * (p + i)); }

 

for (int i = 0; i <5; i ++)

{Printf ( “% c \ n”, * (p ++)); }

 

puntero puntero

variables de puntero ocupan memoria, también hay una dirección de memoria

tipo de puntero:

XX Tipo    * XX tipo de puntero

XX Tipo *    XX tipo de puntero   // tipo de puntero

int ** // puntero de tipo int punteros

char ** // carácter puntero en forma de un tipo de puntero

flotador ** // tipos de coma flotante puntero a un tipo de puntero

p.ej.

int a = 10;

int * p = & a;

int ** p = & p;

 

El uso de vacío -parámetros

void * puede pasar cualquier tipo de dirección

func (void * p)

{// el p convierte en el tipo real }

 

variable de puntero moldeada

int a = 5;

int * p = & a;

int c = (int) p;

int * p2 = (int *) c;

 

variable de puntero moldeada

Char buf [256]

int * p = (int *) buf;

* P = 123;

printf ( “% d \ n”, * p);

 

Char buf [256]

struct A {int a; int b;};

A * p = (A *) buf;

p-> a = 12;

p-> b = 34;

printf ( “% d,% d \ n”, p-> a, p-> b);

 

Supongo que te gusta

Origin www.cnblogs.com/ren-hang/p/12644182.html
Recomendado
Clasificación