剑指offer-数据结构:数组和指针(基础知识)

数据结构一直是技术面试的重点,大多数面试题都是围绕着数组、字符串、链表、树、栈以及队列这几种常见的数据结构展开的。

数组和字符串是两种最基本的数据结构,用连续内存分别存储数字和字符。

在C/C++中,数组和指针是相互关联又有区别的两个概念。当我们声明一个数组时,其数组的名字也是一个指针,该指针指向数组的第一个元素。我们可以用一个指针来访问数组。值得注意的是,C/C++没有记录数组的大小,因此用指针访问数组中的元素时,程序员要确保没有超出数组的边界。通过小例子来了解数组和指针的区别。

#include<iostream>

using namespace std;

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

    cout << size1 <<" " << size2 << " " << size3 << endl;
    return 0;
}

在64位机上输出的是 20 8 8.

data1 是一个数组,sizeof(data1)求数组的大小,数组包含5个整数每个整数占4个字节,因此总共是20个字节。

data2 声明为指针。在 32 位上,对任意指针求 sizeof 结果是 4, 64 位上是8 。

在C/C++中,当数组作为函数的参数进行传递时,数组就会自动退化为同类型的指针。因此,尽管函数GetSize的参数data被声明为数组,但它会退化为指针,sizeof的结果仍为8

你可能感兴趣的:(数据结构,数组,C语言,指针)