source: public/doc/gnu-c/Incomplete-Array-Types.html@ 02598c2

Last change on this file since 02598c2 was 02598c2, checked in by Mikhail Kirillov <w96k@…>, on Oct 6, 2022 at 12:36:29 PM

Add gnu-c

  • Property mode set to 100644
File size: 4.7 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<!-- Copyright (C) 2022 Richard Stallman and Free Software Foundation, Inc.
4
5(The work of Trevis Rothwell and Nelson Beebe has been assigned or
6licensed to the FSF.)
7
8Permission is granted to copy, distribute and/or modify this document
9under the terms of the GNU Free Documentation License, Version 1.3 or
10any later version published by the Free Software Foundation; with the
11Invariant Sections being "GNU General Public License," with the
12Front-Cover Texts being "A GNU Manual," and with the Back-Cover
13Texts as in (a) below. A copy of the license is included in the
14section entitled "GNU Free Documentation License."
15
16(a) The FSF's Back-Cover Text is: "You have the freedom to copy and
17modify this GNU manual. Buying copies from the FSF supports it in
18developing GNU and promoting software freedom." -->
19<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
20<head>
21<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
22<title>Incomplete Array Types (GNU C Language Manual)</title>
23
24<meta name="description" content="Incomplete Array Types (GNU C Language Manual)">
25<meta name="keywords" content="Incomplete Array Types (GNU C Language Manual)">
26<meta name="resource-type" content="document">
27<meta name="distribution" content="global">
28<meta name="Generator" content="makeinfo">
29<link href="index.html" rel="start" title="Top">
30<link href="Symbol-Index.html" rel="index" title="Symbol Index">
31<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
32<link href="Arrays.html" rel="up" title="Arrays">
33<link href="Limitations-of-C-Arrays.html" rel="next" title="Limitations of C Arrays">
34<link href="Array-Type-Designators.html" rel="prev" title="Array Type Designators">
35<style type="text/css">
36<!--
37a.summary-letter {text-decoration: none}
38blockquote.indentedblock {margin-right: 0em}
39div.display {margin-left: 3.2em}
40div.example {margin-left: 3.2em}
41div.lisp {margin-left: 3.2em}
42kbd {font-style: oblique}
43pre.display {font-family: inherit}
44pre.format {font-family: inherit}
45pre.menu-comment {font-family: serif}
46pre.menu-preformatted {font-family: serif}
47span.nolinebreak {white-space: nowrap}
48span.roman {font-family: initial; font-weight: normal}
49span.sansserif {font-family: sans-serif; font-weight: normal}
50ul.no-bullet {list-style: none}
51-->
52</style>
53
54
55</head>
56
57<body lang="en">
58<span id="Incomplete-Array-Types"></span><div class="header">
59<p>
60Next: <a href="Limitations-of-C-Arrays.html" accesskey="n" rel="next">Limitations of C Arrays</a>, Previous: <a href="Array-Type-Designators.html" accesskey="p" rel="prev">Array Type Designators</a>, Up: <a href="Arrays.html" accesskey="u" rel="up">Arrays</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Index.html" title="Index" rel="index">Index</a>]</p>
61</div>
62<hr>
63<span id="Incomplete-Array-Types-1"></span><h3 class="section">16.5 Incomplete Array Types</h3>
64<span id="index-incomplete-array-types"></span>
65<span id="index-array-types_002c-incomplete"></span>
66
67<p>An array is equivalent, for most purposes, to a pointer to its zeroth
68element. When that is true, the length of the array is irrelevant.
69The length needs to be known only for allocating space for the array, or
70for <code>sizeof</code> and <code>typeof</code> (see <a href="Auto-Type.html">Auto Type</a>). Thus, in some
71contexts C allows
72</p>
73<ul>
74<li> An <code>extern</code> declaration says how to refer to a variable allocated
75elsewhere. It does not need to allocate space for the variable,
76so if it is an array, you can omit the length. For example,
77
78<div class="example">
79<pre class="example">extern int foo[];
80</pre></div>
81
82</li><li> When declaring a function parameter as an array, the argument value
83passed to the function is really a pointer to the array&rsquo;s zeroth
84element. This value does not say how long the array really is, there
85is no need to declare it. For example,
86
87<div class="example">
88<pre class="example">int
89func (int foo[])
90</pre></div>
91</li></ul>
92
93<p>These declarations are examples of <em>incomplete</em> array types, types
94that are not fully specified. The incompleteness makes no difference
95for accessing elements of the array, but it matters for some other
96things. For instance, <code>sizeof</code> is not allowed on an incomplete
97type.
98</p>
99<p>With multidimensional arrays, only the first dimension can be omitted:
100</p>
101<div class="example">
102<pre class="example">extern struct chesspiece *funnyboard foo[][8];
103</pre></div>
104
105<p>In other words, the code doesn&rsquo;t have to say how many rows there are,
106but it must state how big each row is.
107</p>
108
109
110
111</body>
112</html>
Note: See TracBrowser for help on using the repository browser.