Files
carbon-lang/docs/design/expressions/pointer_operators.md
T
0d1e6bd84d Values, variables, pointers, and references (#2006)
Introduce a concrete design for how Carbon values, objects, storage,
variables,
and pointers will work. This includes fleshing out the design for:

- The expression categories used in Carbon to represent values and
objects,
how they interact, and terminology that anchors on their expression
nature.
-   An expression category model for readonly, abstract values that can
    efficiently support function inputs.
- A customization system for value expression representations,
especially as
    seen on function boundaries in the calling convention.
- An expression category model for references instead of a type system
model.
-   How patterns match different expression categories.
-   How initialization works in conjunction with function returns.
- Specific pointer syntax, semantics, and library customization
mechanisms.
- A `const` type qualifier for use when the value expression category
system
    is too abstracted from the underlying objects in storage.

---------

Co-authored-by: Geoff Romer <gromer@google.com>
Co-authored-by: josh11b <josh11b@users.noreply.github.com>
Co-authored-by: Adrien Leravat <Pixep@users.noreply.github.com>
Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2023-08-08 07:27:44 +00:00

1.8 KiB

Pointer operators

Table of contents

Overview

Carbon provides the following operators related to pointers:

  • & as a prefix unary operator takes the address of an object, forming a pointer to it.
  • * as a prefix unary operator dereferences a pointer.

Note that member access expressions include an -> form that implicitly performs a dereference in the same way as the * operator.

Details

The semantic details of pointer operators are collected in the main pointers design. The syntax and precedence details are covered here.

The syntax tries to remain as similar as possible to C++ pointer types as they are commonly written in code and are expected to be extremely common and a key anchor of syntactic similarity between the languages.

Precedence

These operators have high precedence. Only member access expressions can be used as an unparenthesized operand to them.

The two prefix operators & and * are generally above the other unary and binary operators and can appear inside them as unparenthesized operands. For the full details, see the precedence graph.

Alternatives considered

References