sizeof (nom du tableau) et sizeof (pointeur)

Lorsque vous faites cette question:

Dans un environnement 32 bits, int * p = new int [10]; Que la valeur de sizeof (p) soit ()
A, 4 B, 10 C, 40 D, 8

Je pensais que la bonne réponse était C, le type int était 32 bits et cela prenait quatre octets, dont dix naturellement 40. La bonne réponse est A, qui est juste l'espace occupé par le pointeur p.

Écrivez donc un morceau de code à tester:

#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);
}

Ou

#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);
}

Sortie des résultats: 

Nom du tableau 40
pointeur 4
dans la fonction 4

 

On peut voir que le nom du tableau n'est pas complètement équivalent au pointeur. Bien qu'ils puissent tous accéder aux tableaux par pointeur.

Cependant, lorsque le tableau est passé en tant que paramètre de fonction, il dégénère en un pointeur. C'est pourquoi les pointeurs passent souvent une longueur lorsqu'ils sont passés en paramètre. (Remarque Wsj: lorsque le pointeur est utilisé comme paramètre formel, ajoutez généralement un paramètre formel - la longueur de ce pointeur)

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

A publié 42 articles originaux · Comme 10 · Visiteurs 10 000+

Je suppose que tu aimes

Origine blog.csdn.net/qq_37659294/article/details/102328093
conseillé
Classement