Citas "Aprenda el lenguaje C en un minuto al día · Nueve", funciones de puntero, punteros de función, etc.

1.
Variables globales ordinarias: el alcance es el programa fuente completo (que contiene múltiples archivos fuente, válidos en cada archivo fuente)
Variables globales estáticas: el alcance está en el archivo fuente actual

2.
Referencia
(1) Al declarar una referencia, se debe inicializar
(2) La variable de referencia es un alias de la variable de destino, que es equivalente a la variable de destino, pero con un nombre diferente
(3) Declarar una referencia no defina una nueva variable, pero solo una referencia a la variable de destino. Un alias. La referencia en sí no es un tipo de datos, por lo que no ocupa una unidad de almacenamiento y el sistema no asignará una unidad de almacenamiento a la
referencia. (4 ) Encontrar la dirección de la referencia es encontrar la dirección de la variable de destino, &a == &i
(5) Cuando está en la función de llamada, los dos valores de la función de llamada se intercambian. El método común es para pasar la dirección de la variable. El segundo método es pasar la referencia
int i =3;
int & a = i; // Aquí a es la variable i, printf(i) == printf (a), printf(&a) = = imprimirf(&i)

//被调函数:
void f(int &a, int &b)
{
    
    
	int t = a;
	a = b;
	b = t;
}
//主调函数:
main
{
    
    
	int a = 1, b = 2;
	f(a, b); //实参已经交换
}

Pero si la variable local se establece como una variable local estática:

int &f()
{
    
    
	static int i = 10; //静态局部变量,在全局区,静态变量等到整个程序运行结束后才会释放
	return i;
}

main()
{
    
    
	int &p = f(); //返回的静态变量要等到整个程序运行结束才释放
	cout << p << endl; //10,
	cout << p << endl; //10
}

(6) Una vez que se inicializa una referencia, no se puede cambiar.

int i = 10;
int &b = i;  //现在b就是变量i的别名
int j = 100;
b = j;  //并没有把b转变为变量j的别名,这里相当于把100赋值给b,又因为b是变量i的别名,也就相当于把100赋值给i

(7) Referencias como valores de retorno de funciones
No devuelve referencias a variables locales:

int & f()
{
    
    
	int i = 10;
	return i;  //返回局部变量引用
}

main()
{
    
    
	int &p = f(); //返回局部变量引用
	cout << p << endl; //10,函数运行结束局部变量销毁,这里编译器第一次保留了返回值
	cout << p << endl; //1013313,第二次打印乱码,编译器不再保留数值 
}

Pero si la variable local se establece como una variable local estática:

int &f()
{
    
    
	static int i = 10; //静态局部变量,在全局区,静态变量等到整个程序运行结束后才会释放
	return i;
}

main()
{
    
    
	int &p = f(); //返回的静态变量要等到整个程序运行结束才释放
	cout << p << endl; //10,
	cout << p << endl; //10
}

(8) Si el valor de retorno de la función es una referencia, esta función se puede utilizar como valor l


int &f()
{
    
    
	static int i = 10;
	return i; 
} 

main()
{
    
    	
	int &p = f(); //函数返回引用给p,此时引用p是变量i的一个别名
	cout << p << endl; //10
	f() = 100; //函数返回变量i值,这时变量i又被赋值100,又因为上面p是变量i的别名,等于p被赋值100
	cout << p << endl; //100 
}

(9) La esencia de una referencia es un puntero constante, la dirección es inmutable y el valor es variable.

int a = 10;
int &b = a;  //实际是int * const b = &a;
b = 20;  //实际是*b = 20;

(10) Referencia constante

int i = 10;
int &p = i; //给引用赋的是变量,如果int &p = 10; 直接赋常量报错
const int &p = 10; //常量引用可以直接赋值,编译器做了一个默认操作,int tmp = 10;然后const int &p = tmp;  而且常量引用值是不可以修改的,因为常量引用本质是常量指针常量,const int * const p = &tmp;

3.
El caso en la declaración de cambio va seguido de una constante o una expresión constante, y es un número entero, una enumeración o un carácter.

4.
int * f(); // La función de puntero devuelve un puntero de tipo Int
int (*f()); // El puntero de función devuelve un valor de tipo int, pero esta función es un puntero a una función Puntero, si hay es otra función g() asignada a f, puede ser f = g o f=&g. Porque el nombre de la función también es la dirección de la función.

5.
char * p[3] // Matriz de punteros, cada elemento es una cadena de tipo char *
char (*p)[3] // Puntero de matriz, equivalente a char p[][3] matriz bidimensional

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/cs1395293598/article/details/135183276
Recomendado
Clasificación