Nombre de matriz y & nombre de matriz

#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.

Supongo que te gusta

Origin blog.csdn.net/qq_72505850/article/details/129916725
Recomendado
Clasificación