sizeof (nombre de matriz) y sizeof (puntero)

Al hacer esta pregunta:

En un entorno de 32 bits, int * p = new int [10]; puede que el valor de sizeof (p) sea ()
A, 4 B, 10 C, 40 D, 8

Pensé que la respuesta correcta era C, el tipo int era de 32 bits y requería cuatro bytes. Diez de ellos serían naturalmente 40. La respuesta correcta es A, que es solo el espacio ocupado por el puntero p.

Entonces escriba un fragmento de código para probar:

#include<iostream>
using namespace std;
void fun(int P[])//P这里作为指针使用
{
cout<<"在函数中"<<sizeof(P)<<endl;
}
int main()
{
int A[10];
int* B=new int[10];
cout<<"数组名"<<sizeof(A)<<endl;
cout<<"指针"<<sizeof(B)<<endl;
fun(A);
}

O

#include<iostream>
using namespace std;
void fun(int *P)
{
    cout<<"在函数中"<<sizeof(P)<<endl;
}
int main()
{
    int A[10];
    int* B=new int[10];
    cout<<"数组名"<<sizeof(A)<<endl;
    cout<<"指针"<<sizeof(B)<<endl;
    fun(A);
}

Resultados de salida: 

Nombre de matriz 40
puntero 4
en función 4

 

Se puede ver que el nombre de la matriz no es completamente equivalente al puntero. Aunque todos pueden acceder a las matrices por puntero.

Sin embargo, cuando la matriz se pasa como un parámetro de función, se degenerará en un puntero. Es por eso que los punteros a menudo pasan una longitud cuando se pasan como parámetro. (Nota de Wsj: cuando el puntero se usa como parámetro formal, generalmente se agrega un parámetro formal, la longitud de este puntero)

De: http://blog.csdn.net/kangroger/article/details/20653255

42 artículos originales publicados · Me gusta 10 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/qq_37659294/article/details/102328093
Recomendado
Clasificación