Tipo de datos de lenguaje C y resumen de puntero

Bytes de tipo de datos comunes

Tipo 16 32o 64
carbonizarse 1 1 1
int corto 2 2 2
En t 2 4 4 4 4
unsigned int 2 4 4 4 4
flotador 4 4 4 4 4 4
doble 8 8 8
largo 4 4 4 4 8
largo largo 8 8 8
sin firmar largo 4 4 4 4 8

Compilador de 16 bits: char *: 2 bytes

Editor de 32 bits: char *: 4 bytes

Editor de 64 bits: char *: 8 bytes

La diferencia entre const int * p e int * const p se analiza utilizando el código:

#include <iostream>

using namespace std;

int main() {
	int  i1 = 40;
	int i2 = 20;
	const int *p;
	p = &i1;
	p = &i2; //不报错
	*p = 80; //报错
	//表明如果const在*前面表示*p是常量。
	i2 = 80;
	cout << *p << endl;
	return 0;
}
#include <iostream>

using namespace std;

int main() {
	int  i1 = 40;
	int i2 = 20;
	//p = &i1;  //报错
	int * const p = &i1;
	//p = &i2; //报错
	*p = 80; //不报错
	//表明如果const在*后面表示p是常量。
	i2 = 80;
	cout << *p << endl;
	return 0;
}

Agrega tres situaciones

Caso 1: puntero int * p para constante int i1 constante

#include <iostream>

using namespace std;

int main() {
	const int i1 = 20;
	int *p;
	//p = &i1; //报错,const int 类型的i1的地址是不能赋值给指向int类型地址的指针pi的,否
	//则pi岂不是能修改i1的值了吗?
	p = (int *) &i1;
	cout << *p << endl;
	*p = 80; 
	cout << *p << endl;
	cout << i1 << endl;
	return 0;
}

Respuesta de salida:

El valor de i1 no ha cambiado.

#include <iostream>

using namespace std;

int main() {
	const int i1 = 20;
	
	int *p;
	p = (int *) &i1;
	cout << p << endl;
	cout << *p << endl;
	*p = 80;
	cout << p << endl; 
	cout << *p << endl;
	cout << i1 << endl;
	cout << &i1 << endl;
	return 0;
}

Salida:

El motivo es actualmente desconocido.

Caso 2: el puntero const int * pi apunta a const int i1

Los dos tipos son iguales y se pueden asignar como se muestra en el siguiente programa. i1 no puede ser modificado por pi e i1.

#include <iostream>

using namespace std;

int main() {
	const int i1 = 20;
	const int *p;
	p = &i1;
	cout << *p << endl;
	return 0;
}

Caso 3: Use const int * const p1 para declarar un puntero

#include <iostream>

using namespace std;

int main() {
	int i1 = 20;
	int i2 = 10;
	const int *const p = &i1;//必须在定义是初始化。 
	//p = &i2; //报错 
	//*p = 80; //报错 
	cout << *p << endl;
	return 0;
}

La variable puntero en sí está en una dirección de memoria como otras variables. También podemos hacer un puntero apuntando a esta dirección.

int corto * p;

short int ** pp; declara una variable de puntero pp, que se utiliza para almacenar (o señalar) la dirección de una variable de puntero de tipo short int *.

pp = & p; es asignar la dirección de p a pp.

Ejemplos:

#include <iostream>

using namespace std;

int main() {
	short int a;
	short int *p;
	short int **pp;
	a = 10;
	p = &a;
	pp = &p;
	cout << a << endl;
	cout << *p << endl;
	cout << **pp << endl;
	return 0;
}

El resultado es:

 

158 artículos originales publicados · Me gusta 10 · Visitantes más de 20,000

Supongo que te gusta

Origin blog.csdn.net/ab1605014317/article/details/105512440
Recomendado
Clasificación