C/C++配列とポインタの違い

配列の名前はポインタです。この文は多くの人によく知られていると思われますが、C 言語を始めるときに配列とポインタの関係を理解し​​やすくするために、このような単純化が通常行われます。
しかし実際には、配列とポインタの間にはまだいくつかの違いがあります。
次のようなコードを見てください。

#include <stdio.h>

int GetSize(int data[]) {
    
    
    return sizeof(data);
}

int main() {
    
    
    int data1[] = {
    
    1, 2, 3, 4, 5};
    int size1 = sizeof(data1);

    int* data2 = data1;
    int size2 = sizeof(data2);

    int size3 = GetSize(data1);

    printf("%d %d %d", size1, size2, size3);
    return 0;
}

このコードは、He Haitao 著の「Jianzhi Offer (2nd Edition) Famous Enterprise Interviewers Recipe Typical Programming question」から変更されたものです。

出力は次のとおりです。

/* 64 位机器 */
20 8 8
/* 32 位机器 */
20 4 4
/* 64位机器上指针类型占 8 个字节, 32 位机器上指针类型占 4 个字节 */

結果は、
data1 が配列を表し、配列の最初のアドレスも表し、sizeof(data1) が配列のサイズを表すことを示します (各整数は 4 バイトを占有し、5 つの整数は合計 20 バイトを占有します)。
data2 は、ポインターが配列の最初のアドレスを指していても、配列を完全に表すことはできず、その本質は依然としてポインターであることを示しています。
data3 は、配列がパラメータとして関数に渡されると、配列が自動的にポインタに縮退することを示します。

参考文献:「Jianzhi Offer (第 2 版) 有名企業面接官が講義する典型的なプログラミングの質問」(He Haitao 著)

おすすめ

転載: blog.csdn.net/m0_59838087/article/details/120643731