Resumen del conocimiento de C que debe dominarse antes de aprender la estructura de datos (puntero 2)

Haga un resumen del conocimiento de C que necesita dominar antes de aprender las estructuras de datos (puntero 1)

1. Usando el nombre de la matriz como un parámetro de función
. Hemos dicho antes que el nombre del grupo de parámetros real representa la dirección del primer elemento de la matriz, y el parámetro formal se usa para recibir la primera dirección de la matriz pasada desde el parámetro real, por lo que el parámetro formal debe ser Una variable de puntero, el compilador de C trata el nombre del grupo de parámetros como una variable de puntero. Ejemplo:
void fun (int arr [], int n);
void fun (int * arr, int n);
Estos dos métodos de escritura son equivalentes.
Usemos un código completo para ver cómo se usa el nombre de la matriz como parámetro de función

#include<stdio.h>
void fun(int arr[], int n){
int* p = arr,i;
for (i = 0; i < 10; i++, p++) 
	printf("%d", *p);
		printf("\n");
for (i = 0; i < 10; i++)
	printf("%d", arr[i]);
		printf("\n");
		}
void fun_1(int *arr, int n){
int* p = arr, i;
for (i = 0; i < 10; i++, p++)
	printf("%d", *p);
printf("\n");
for (i = 0; i < 10; i++,arr++)
	printf("%d", *arr);
printf("\n");
p = arr;}
int main()
{
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
fun(a, 10);
fun_1(a, 10);
return 0;
}

Inserte la descripción de la imagen aquí

A partir de los resultados de ejecución, podemos ver que estos dos métodos de escritura son de hecho equivalentes.En cuanto a la suma y resta de variables, se ha mencionado en el artículo anterior, por lo que no lo explicaré aquí.
2. El uso de punteros para referirse a
matrices multidimensionales puede ser desconocido para todos. Solo presentamos matrices bidimensionales. Los conceptos básicos y el uso de matrices bidimensionales deben ser claros para todos. La dificultad aquí es cuando se usan punteros para referirse a matrices multidimensionales. Operación cuando matriz.

int main() {
int a[3][3] = { 1,2,3,
				4,5,6,
				7,8,9 };
int* p = &a[0][0];
printf("%d,%d,%d", a,&a,p);	printf("\n");
printf("%d,%d", a+1, p+1);	printf("\n");
printf("%d,%d", *a, *p);	printf("\n");
printf("%d,%d", *a+1, *p+1);	printf("\n");
printf("%d,%d", &a[1][1], *(p + 1)+1);	printf("\n");
printf("%d,%d", *(a + 1), *(p + 1));	printf("\n");
printf("%d,%d", (*a) + 1, (*p) + 1);	printf("\n");
printf("%d,%d", *(a + 1)+1, *(p + 1)+1);printf("\n");
return 0;

} Inserte la descripción de la imagen aquí
Casi todo aquí, quizás mucho, pero si miras el código mientras miras los resultados de la operación, no debería ser particularmente difícil de entender. A continuación, déjame explicarte lo que significa cada línea de código. Para que sea obvio para todos, aquí hay una matriz bidimensional Lo escribí por separado.

a,p,&a,*a代表的是0行首地址和0行0列的首地址,其实是一个地址,只不过换了个说法而已。

a+1, p+1代表的是1行首地址,因为每行的元素有三个,
每个元素都是整形占4个字节,所以多出12个字节,
这里要说明一下,行和列是我们为了方便说明多维数组而加上去的一个概念,
在真实的计算机中,数组数据的储存是连续的,并不存在所谓的行列。

* a+1和  * (a + 1)相同是因为 *  的优先级比+要高;

Todos los demás pueden compararlo claramente para ver lo que significa.

En lenguaje C, debido a que los subíndices comienzan desde 0, si hay una matriz bidimensional a [i] [j], y se conocen los valores de i y j, puede usar la fórmula i * m + j para calcular a [i ] [j] La posición relativa relativa al comienzo de la matriz.

3. Hacer referencia a una cadena a través de un puntero
Utilice una variable de puntero de carácter para apuntar a una constante de cadena y use una variable de puntero de carácter para referirse a una cadena.
(1) char * string = "ABC"
(2) char * string;
string = "ABC";
Estos dos son equivalentes. En el segundo método, las direcciones de todos los caracteres no se almacenan, pero Solo se coloca la dirección del primer elemento. Entonces, algunas personas preguntarán si solo hay una dirección, ¿cómo se puede generar la cadena completa? De hecho, el sistema agregará automáticamente 1 a la cadena para apuntar al siguiente carácter hasta que encuentre el final de la cadena '\ n'.
4. Puntero de carácter como parámetro de función

  1. Tome la matriz de caracteres como forma para participar en la llamada de parámetros reales
  2. Llamar con matriz de caracteres como parámetro formal y puntero como parámetro real
  3. Tome el puntero como la forma para participar en la llamada al argumento

De hecho, esto es algo parecido al nombre de la matriz como parámetro de función. Solo necesita saber que existen estos tres métodos. Estamos en la estructura de datos, en lo que respecta a la introducción, todos están dando forma, y ​​poner algunos códigos es simple Solo míralo. Para punteros a funciones, funciones que devuelven valores de puntero, matrices de punteros y punteros múltiples, no los presentaré aquí. Hablaré sobre estas cosas en detalle en términos de tiempo.

#include <stdio.h>
void char_Copy(char* p, char* q)
{
    
    
	for (; *p != '\0'; p++)
	{
    
    
		if (*p == 'A' || *p == 'E' || *p == 'I' || *p == 'O' || *p == 'U')
		{
    
    
			*q++ = *p;
		}
	}
	*q = '\0';
}
void main()
{
    
    
	char a[20], b[20];
	scanf_s("%s", a);
	char_Copy(a, b);
	puts(b);
}
#include <stdio.h>
void del_char(char* q, char x)
{
    
    
	char* ptr;
	for (ptr = q; *ptr != '\0'; ptr++)
		if (*ptr != x)
			*q++ = *ptr;
	*q = '\0';
}

void main()
{
    
    
	char a[20], c;
	printf("input string :\n");
	gets(a);
	printf("input delete char : ");
	c = getchar();
	del_char(a, c);
	puts(a);
}
#include <stdio.h>
void fun1(int x,int y)
{
    
    
	int t;
	t=x;
	x=y;
	y=t;
	printf("%d %d\n",x,y);
}
void func2(int *x,int *y)
{
    
    
	int *t;
	t= x;
	x=y;
	y=t;
	printf("%d %d\n",*x,*y);
}
void main()
{
    
    
	int a,b;
	scanf("%d%d",&a,&b);
	fun1(a,b);
	func2(&a,&b);
}

En cuanto al conocimiento de los punteros, conocer estas estructuras de datos de aprendizaje no es un gran problema. El siguiente es algunas cosas en la estructura. La estructura es menor que el puntero. La base del libro de estructura de datos es la lista enlazada. Después de terminar el conocimiento de la estructura, comencé a hablar sobre algunas cosas sobre la lista vinculada.

Supongo que te gusta

Origin blog.csdn.net/weixin_47160672/article/details/108649898
Recomendado
Clasificación