Errores comunes del puntero de C ++

1. Usar como puntero inicializado

int main(void){
    
    	
	//使用未初始化的指针
	int *p;
	printf("*p value: 0X%p\n",*p);
	
	return 0;
}

Mensaje de error
2. Asignar el valor al puntero como dirección

int main(void){
    
    	
	
	int *p;
	int val = 10;

	//将值赋给指针
	p = val;

	return 0;
}

Asignar valor a la captura de pantalla de error de puntero
3. Olvídese de desreferenciar y acceder directamente a la memoria

int main(void){
    
    	
	int arr[10];
	int *p1,*p2;

	p1 = &arr[0];
	p2 = &arr[1];

	//判断数组两个元素的大小
	if(p1>p2){
    
    
		//内容永远不会被执行,因为比较的p1和p2的地址大小,p1永远小于p2
	}

	return 0;
}

4. Úselo de nuevo para ignorar la reasignación.

int main(void){
    
    	
	char arr[10];
	char *p;
	p = arr;

	do{
    
    
		gets(arr);	//控制台获取一组字符
		while(*p){
    
    
			printf("arr's value: %c\n",*p++);
		}
	}while(strcmp(arr,"done")!=0);

	return 0;
}

No reasignado-menor que la longitud original
No reasignado: mayor que la longitud original

Causa: p tiene punteros que apuntan a los elementos de la matriz en el séptimo extremo de la cadena "0 \", la próxima vez que imprima,
si la entrada es menor que la longitud del contenido original, o el puntero p apunta a las terminaciones y, por lo tanto, puede no imprimir
si la longitud del contenido de entrada es mayor que el original y el contenido impreso también se muestra incorrectamente

Solución: reinicialice el puntero cada vez que el bucle

int main(void){
    
    	
	char arr[10];
	char *p;
//	p = arr;

	do{
    
    
		gets(arr);	//控制台获取一组字符
		p = arr;	//每次循环进行初始化操作
		while(*p){
    
    
			printf("arr's value: %c\n",*p++);
		}
	}while(strcmp(arr,"done")!=0);

	return 0;
}

Captura de pantalla correcta

Supongo que te gusta

Origin blog.csdn.net/jjswift/article/details/112730145
Recomendado
Clasificación