#### 8.4.6 Creating row and column views

In general there are two ways to access an object, by reference or by copying. The functions described in this section create vector views which allow access to a row or column of a matrix by reference. Modifying elements of the view is equivalent to modifying the matrix, since both the vector view and the matrix point to the same memory block.

Function: gsl_vector_view gsl_matrix_row (gsl_matrix * m, size_t i)
Function: gsl_vector_const_view gsl_matrix_const_row (const gsl_matrix * m, size_t i)

  These functions return a vector view of the i-th row of the matrix m. The `data` pointer of the new vector is set to null if i is out of range.

  The function `gsl_vector_const_row` is equivalent to `gsl_matrix_row` but can be used for matrices which are declared `const`.

Function: gsl_vector_view gsl_matrix_column (gsl_matrix * m, size_t j)
Function: gsl_vector_const_view gsl_matrix_const_column (const gsl_matrix * m, size_t j)

  These functions return a vector view of the j-th column of the matrix m. The `data` pointer of the new vector is set to null if j is out of range.

  The function `gsl_vector_const_column` is equivalent to `gsl_matrix_column` but can be used for matrices which are declared `const`.

Function: gsl_vector_view gsl_matrix_subrow (gsl_matrix * m, size_t i, size_t offset, size_t n)
Function: gsl_vector_const_view gsl_matrix_const_subrow (const gsl_matrix * m, size_t i, size_t offset, size_t n)

  These functions return a vector view of the i-th row of the matrix m beginning at offset elements past the first column and containing n elements. The `data` pointer of the new vector is set to null if i, offset, or n are out of range.

  The function `gsl_vector_const_subrow` is equivalent to `gsl_matrix_subrow` but can be used for matrices which are declared `const`.

Function: gsl_vector_view gsl_matrix_subcolumn (gsl_matrix * m, size_t j, size_t offset, size_t n)
Function: gsl_vector_const_view gsl_matrix_const_subcolumn (const gsl_matrix * m, size_t j, size_t offset, size_t n)

  These functions return a vector view of the j-th column of the matrix m beginning at offset elements past the first row and containing n elements. The `data` pointer of the new vector is set to null if j, offset, or n are out of range.

  The function `gsl_vector_const_subcolumn` is equivalent to `gsl_matrix_subcolumn` but can be used for matrices which are declared `const`.

Function: gsl_vector_view gsl_matrix_diagonal (gsl_matrix * m)
Function: gsl_vector_const_view gsl_matrix_const_diagonal (const gsl_matrix * m)

  These functions return a vector view of the diagonal of the matrix m. The matrix m is not required to be square. For a rectangular matrix the length of the diagonal is the same as the smaller dimension of the matrix.

  The function `gsl_matrix_const_diagonal` is equivalent to `gsl_matrix_diagonal` but can be used for matrices which are declared `const`.

Function: gsl_vector_view gsl_matrix_subdiagonal (gsl_matrix * m, size_t k)
Function: gsl_vector_const_view gsl_matrix_const_subdiagonal (const gsl_matrix * m, size_t k)

  These functions return a vector view of the k-th subdiagonal of the matrix m. The matrix m is not required to be square. The diagonal of the matrix corresponds to k = 0.

  The function `gsl_matrix_const_subdiagonal` is equivalent to `gsl_matrix_subdiagonal` but can be used for matrices which are declared `const`.

Function: gsl_vector_view gsl_matrix_superdiagonal (gsl_matrix * m, size_t k)
Function: gsl_vector_const_view gsl_matrix_const_superdiagonal (const gsl_matrix * m, size_t k)

  These functions return a vector view of the k-th superdiagonal of the matrix m. The matrix m is not required to be square. The diagonal of the matrix corresponds to k = 0.

  The function `gsl_matrix_const_superdiagonal` is equivalent to `gsl_matrix_superdiagonal` but can be used for matrices which are declared `const`.