# std::array<T,N>::data

From cppreference.com
< cpp‎ | container‎ | array

| (1) |
T* data() noexcept; |  | (since C++11) (until C++17)
constexpr T* data() noexcept; |  | (since C++17)
| (2) |
const T* data() const noexcept; |  | (since C++11) (until C++17)
constexpr const T* data() const noexcept; |  | (since C++17)

Returns pointer to the underlying array serving as element storage. The pointer is such that range `[`data()`,` data() +`` size()`)` is always a valid range, even if the container is empty (`data()` is not dereferenceable in that case).

### Parameters

(none)

### Return value

Pointer to the underlying element storage. For non-empty containers, the returned pointer compares equal to the address of the first element.

### Complexity

Constant.

### Notes

If size() is ​0​, `data()` may or may not return a null pointer.

### Example

Run this code

    #include <cstddef>
    #include <iostream>
    #include <span>
    #include <array>

    void pointer_func(const int* p, std::size_t size)
    {
        std::cout << "data = ";
        for (std::size_t i = 0; i < size; ++i)
            std::cout << p[i] << ' ';
        std::cout << '\n';
    }

    void span_func(std::span<const int> data) // since C++20
    {
        std::cout << "data = ";
        for (const int e : data)
            std::cout << e << ' ';
        std::cout << '\n';
    }

    int main()
    {
        std::array<int, 4> container{1, 2, 3, 4};

        // Prefer container.data() over &container[0]
        pointer_func(container.data(), container.size());

        // std::span (C++20) is a safer alternative to separated pointer/size.
        span_func({container.data(), container.size()});
    }

Output:

    data = 1 2 3 4
    data = 1 2 3 4

### See also

front (C++11) | access the first element (public member function)
back (C++11) | access the last element (public member function)
size (C++11) | returns the number of elements (public member function)
span (C++20) | a non-owning view over a contiguous sequence of objects (class template)
data (C++17) | obtains the pointer to the underlying array (function template)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/array/data&oldid=122713"