# subsref

Subscripted reference

## Syntax

``B = subsref(A,S)``

## Description

For classes authored in R2021b and later, the recommended process for customizing indexing is to inherit from some combination of `matlab.mixin.indexing.RedefinesParen`, `matlab.mixin.indexing.RedefinesDot`, and `matlab.mixin.indexing.RedefinesBrace`. For more information, see Customize Object Indexing.

example

``B = subsref(A,S)` is called by MATLAB® for the syntax `A(i)`, `A{i}`, or `A.i` when `A` is an object. `

## Examples

collapse all

This example shows how MATLAB® calls `subsref` for the following indexing expression.

```A = magic(5); A(1:2,:)```
```ans = 2×5 17 24 1 8 15 23 5 7 14 16 ```

The syntax, `A(1:2,:)`, results in a call to `B = subsref(A,S)` where `S` is a 1-by-1 structure where `S.type` is `'()'` and `S.subs` is `{1:2,':'}`. The colon character indicates a colon used as a subscript.

This example shows how MATLAB® calls `subsref` for indexing expression that use braces.

```C = {"one", 2, 'three'}; C{1:2}```
```ans = "one" ```
```ans = 2 ```

The syntax, C{1:2}, results in a call to `[c1,c2] = subsref(C,S)` where `S.type` is `'{}'` and `S.subs` is `{[1 2]}`.

This example shows how MATLAB® calls `subsref` for indexing expression that use dot notation.

```A = struct('number',10); A.number```
```ans = 10 ```

The syntax `A.number` results in a call to `B = subsref(A,S)` where `S.Type` is `'.'` and `S.subs` is `'number'`.

## Input Arguments

collapse all

Indexed object array, passed by MATLAB as the object array that is part of the indexing expression.

Indexing structure, passed by MATLAB as the indexing `substruct` for the indexing expression that caused the call to subsref. This structure has these fields:

• `type` – Character vector or string scalar containing `()`, `{}`, or `.`, specifying the subscript type.

• `subs` – Cell array, character vector, or string scalar containing the actual subscripts.

Index expressions can use more than one level to form more complicated expressions. For example `A{1}.field(3:5)` has three levels of indexing. For this expression, `S` is a 3-by-1 structure array with these fields:

```disp(S(1)) type: '{}' subs: {[1]} disp(S(2)) type: '.' subs: 'field' disp(S(3)) type: '()' subs: {[3 4 5]}```

Data Types: `struct`

## Output Arguments

collapse all

Result of indexing expression.

collapse all

### Understanding Indexing Expressions

`A(I)` is an array formed from the elements of `A` specified by the subscript vector `I`. The resulting array is the same size as `I` except for the special case where `A` and `I` are both vectors. In this case, `A(I)` has the same number of elements as `I` but has the orientation of `A`.

`A(I,J)` is an array formed from the elements of the rectangular submatrix of `A`, specified by the subscript vectors `I` and `J`. The resulting array has `length(I)` rows and `length(J)` columns. A colon used as a subscript indicates all elements in that dimension. For example, `A(I,:)` means all columns of those rows specified by vector `I`. Similarly, `A(:,J)` means all rows of columns specified by `J`.

`A(I,J,K,...)` is the array specified by the subscripts. The result is `length(I)`-by-`length(J)`-by-`length(K)...`.

`A{I}` where `A` is a cell array and `I` is a scalar forms a copy of the array in the specified cell of `A`. If `I` has more than one element, this expression is a comma-separated list. You can also use multiple subscripts that specify a scalar element, as in `A{3,4}`.

`A(I).field` when `A` is a structure array and `I` is a scalar forms a copy of the array in the field with the name `field`. If `I` has more than one element, this expression is a comma-separated list. If `A` is a 1-by-1 structure array, then the subscript can be dropped. In this case, `A.field` is the same as `A(1).field`.

## Version History

Introduced before R2006a