NetCDF
4.7.2

Many of the argurments of netCDF functions are pointers. For example, the nc_inq() functions takes four pointers:
A NULL may be passed for any of these pointers, and it will be ignored. For example, interested in the number of dimensions only, the following code will work:
User must allocate space for the result of an inq function before the function is called.
The NetCDF allows specification of hyperslabs to be read or written with vectors which specify the start, count, stride, and mapping.
A vector of size_t integers specifying the index in the variable where the first of the data values will be read.
The indices are relative to 0, so for example, the first data value of a variable would have index (0, 0, ... , 0).
The length of start vector must be the same as the number of dimensions of the specified variable. The elements of start correspond, in order, to the variable's dimensions.
A vector of size_t integers specifying the edge lengths along each dimension of the block of data values to be read.
To read a single value, for example, specify count as (1, 1, ... , 1).
The length of count is the number of dimensions of the specified variable. The elements of count correspond, in order, to the variable's dimensions.
Setting any element of the count array to zero causes the function to exit without error, and without doing anything.
A vector of size_t integers specifying the interval between selected indices.
A value of 1 accesses adjacent values of the netCDF variable in the corresponding dimension; a value of 2 accesses every other value of the netCDF variable in the corresponding dimension; and so on.
The elements of the stride vector correspond, in order, to the variable's dimensions.
A NULL stride argument is treated as (1, 1, ... , 1).
A vector of integers that specifies the mapping between the dimensions of a netCDF variable and the inmemory structure of the internal data array.
imap[0] gives the distance between elements of the internal array corresponding to the most slowly varying dimension of the netCDF variable. imap[n1] (where n is the rank of the netCDF variable) gives the distance between elements of the internal array corresponding to the most rapidly varying dimension of the netCDF variable. Intervening imap elements correspond to other dimensions of the netCDF variable in the obvious way. Distances between elements are specified in typeindependent units of elements.
Most netCDF function require the netCDF ID as a first parameter.
In the netCDF classic model, the netCDF ID is associated with an open file. Each file, when opened by nc_open(), or created by nc_create(), is assigned an ncid, which it retains until nc_close() is called.
In the netCDF enhanced model, the ncid refers to a group with a file. (Each file contains at least the root group, which is the ncid that is returned by nc_open() and nc_create().)
For netCDF4/HDF5 files, netCDF IDs can come not just from nc_open() and nc_create(), but also from nc_def_grp(), nc_inq_grps(), nc_inq_ncid(), nc_inq_grp_parent(), and nc_inq_grp_full_ncid().