#include<stdio.h>
int main(){
int arr[10] = {0};
printf("%p\n",arr);
printf("%p\n",&arr);
return 0;
}
Aunque los resultados de la impresión del código anterior son los mismos, los significados son diferentes
printf("%p\n",arr); Esto significa que se imprime la dirección del primer elemento de la matriz
printf("%p\n",&arr); Esto es para imprimir la dirección de la matriz
Estos dos tipos son diferentes.
Por ejemplo
#include<stdio.h>
int main (){
int i = 97;
char c = 'a';
printf("%d\n",i);
printf("%d\n",c);
return 0;
}
Los valores impresos por ambos son enteros son los mismos, pero sus tipos son diferentes
2.
int main(){
int arr[10] = {0};
int * p1 = arr; //p1是一个整型指针
int (*p2) [10] = &arr; //p2是一个数组指针
printf("%p\n",p1);
printf("%p\n",p2);
return 0 ;
}
Tenga en cuenta el siguiente código
int main(){
int arr[10] = {0};
int * p1 = arr; //p1是一个整型指针
int (*p2) [10] = &arr; //p2是一个数组指针
printf("%p\n",p1);
printf("%p\n",p1+1); //这里指针+1 会跳过一个整型的指针(即跳过四个字节)
printf("%p\n",p2);
printf("%p\n",p2+1); //这里指针+1 会跳过一个整型数组的指针(即跳过40个字节)
return 0 ;
}
Resultado de salida:
Cuando tomamos la dirección, &arr representa la dirección de la matriz, no la dirección del primer elemento de la matriz
//练习
double* d[5]; //d数组的每个元素 每个元素是double*类型的
double* (*pd)[5] = &d;
//pd 就是一个数组指针
//(*pd)[5] 这个说明 指针指向的是数组5个元素
//double* (*pd)[5] = &d; 这个说明 指针指向的是数组5个元素,指向的每个元素是double* 类型的
Reponer:
El nombre de la matriz es la dirección del primer elemento de la matriz.
con dos excepciones
1. sizeof(nombre de la matriz): el nombre de la matriz representa la matriz completa y el cálculo es el tamaño de la matriz completa, en bytes
2. &Nombre de la matriz: el nombre de la matriz indica que la dirección de toda la matriz se recupera de toda la matriz.