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: