1<!DOCTYPE html> 2<html lang="zh-cn"> 3 4<!-- head --> 5<head> 6 <meta charset="utf-8"> 7 <title>æ´è±èçå客</title> 8 9 <meta name="viewport" content="width=device-width, initial-scale=1"> 10 11 <style> 12 * { 13 box-sizing: border-box; 14 } 15 16 html, 17 body { 18 width: 100%; 19 height: 100%; 20 margin: 0; 21 padding: 0; 22 overflow-x: hidden; 23 } 24 25 .container { 26 width: 100%; 27 max-width: 100%; 28 padding-left: 0; 29 padding-right: 0; 30 } 31 32 @media (min-width: 768px) { 33 .container { 34 max-width: 100%; 35 padding-left: 0; 36 padding-right: 0; 37 } 38 } 39 </style> 40 41 <!-- Initial Light / Dark Theme Toggle --> 42
42<script> 43 (function() { 44 try { 45 var theme = localStorage.getItem('bs-theme'); 46 if (!theme) { 47 theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; 48 } 49 document.documentElement.setAttribute('data-bs-theme', theme); 50 } catch (e) {} 51 })(); 52 </script>
52 53 54 <!-- favicon --> 55 <link rel="icon" href="/img/favicon.ico"> 56 57 <!-- Bootstrap5æä»¶ --> 58 <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"> 59
59<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
59 60 61 <!-- jquery --> 62
62<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script>
62 63 64 <!-- æç« 页ç¾å --> 65
66<script src="/js/post.js"></script>
66 67 68 69 <!-- 代ç é«äº® --> 70 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/styles/panda-syntax-light.css" id="highlight-css-light" disabled> 71 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/styles/panda-syntax-dark.css" id="highlight-css-dark" disabled> 72
72<script src="https://cdn.jsdelivr.net/gh/highlightjs/[email protected]/build/highlight.min.js"></script>
72 73
74<script src="/js/use_hl.js"></script>
74 75 76 77 <!-- Bootstrap5 徿 åº --> 78 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css"> 79 80 <!-- fancybox --> 81
82<script src="/js/fancybox.js"></script>
82 83 84 <link rel="stylesheet" href="https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.css"> 85
85<script src="//lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.js"> </script>
85 86 87 <!-- local search --> 88
89<script src="/js/search.js"></script>
89 90 91
91<script type="text/javascript"> 92 var search_path = "search.xml"; 93 if (search_path.length == 0) { 94 search_path = "search.xml"; 95 } 96 var path = "/" + search_path; 97 searchFunc(path, 'local-search-input', 'local-search-result'); 98 </script>
98 99 100 <!-- Google Font 101 <link rel="preconnect" href="https://fonts.googleapis.com"> 102 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 103 <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:[email protected]&display=swap" rel="stylesheet"> 104 105 <style> 106 .withfont { 107 font-family: "Noto Serif SC", serif; 108 /* font-optical-sizing: auto; */ 109 /* font-weight: <weight>; */ 110 /* font-style: normal; */ 111 } 112 </style> --> 113 <!-- è½éªææ¥· --> 114 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/style.css" /> 115 <style> 116 body { 117 font-family: "LXGW WenKai", sans-serif; 118 } 119 </style> 120 121 <!-- busuanzi --> 122
122<script src="//api.busuanzi.cc/static/3.6.9/busuanzi.min.js" defer></script>
122 123 124 <!-- Pagination --> 125
126<script src="/js/pagination.js"></script>
126 127 128 129 <!-- Theme renderer --> 130
131<script src="/js/theme.js"></script>
131 132 133 134 <!-- LaTeX --> 135 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css" integrity="sha384-5TcZemv2l/9On385z///+d7MSYlvIEw9FuZTIdZ14vJLqWphw7e7ZPuOiCHJcFCP" crossorigin="anonymous"> 136 <!-- The loading of KaTeX is deferred to speed up page rendering --> 137
137<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.js" integrity="sha384-cMkvdD8LoxVzGF/RPUKAcvmm49FQ0oxwDF3BGKtDXcEc+T1b2N+teh/OJfpU0jr6" crossorigin="anonymous"></script>
137 138 <!-- To automatically render math in text elements, include the auto-render extension: --> 139
139<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/contrib/auto-render.min.js" integrity="sha384-hCXGrW6PitJEwbkoStFjeJxv+fSOOQKOPbJxSfM6G5sWZjAyWhXiTIIAmQqnlLlh" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script>
139 140 141 <!-- live2d --> 142 <!--
142<script src="https://fastly.jsdelivr.net/npm/[email protected]/dist/autoload.js"></script>
142 --> 143 <!--
143<script src="https://raw.githack.com/LOnion1124/live2d-widget/refs/heads/master/dist/autoload.js"></script>
143 --> 144
145<script src="/live2d/dist/autoload.js"></script>
145 146 147<meta name="generator" content="Hexo 7.3.0"></head> 148 149<body class='withfont'> 150 <div class="flex-column min-vh-100"> 151 <div><nav class="py-2 border-bottom bg-light-subtle"> 152 <div class="container d-flex flex-wrap"> 153 <ul class="nav me-auto"> 154 <!-- Home --> 155 <li class="nav-item px-2 menu-item-home"> 156 157 <a class="nav-link link-body-emphasis" href="/">主页</a> 158 159 </li> 160 161 <!-- Archive --> 162 <li class="nav-item px-2 menu-item-archives"> 163 164 <a class="nav-link link-body-emphasis" href="/archives">彿¡£</a> 165 166 </li> 167 168 <!-- Gallery --> 169 170 <li class="nav-item px-2 menu-item-gallery"> 171 172 <a class="nav-link link-body-emphasis" href="/gallery">éå</a> 173 174 </li> 175 176 177 <!-- About --> 178 179 <li class="nav-item px-2 menu-item-about"> 180 181 <a class="nav-link link-body-emphasis" href="/about">å ³äº</a> 182 183 </li> 184 185 </ul> 186 <ul class="nav"> 187 <li class="nav-item nav-item-mailbox"><a href="#" data-bs-toggle="modal" data-bs-target="#infoModal" class="theme-link nav-link link-dark px-2"><i class="bi bi-envelope-at"></i></a></li> 188 <li class="nav-item nav-item-github"><a target="_blank" rel="noopener" href="https://github.com/LOnion1124" class="theme-link nav-link link-dark px-2"><i class="bi bi-github"></i></a></li> 189 </ul> 190 </div> 191</nav> 192 193<header class="py-3 mb-4 border-bottom shadow-sm"> 194 <div class="container d-flex flex-wrap justify-content-center"> 195 <span class="d-flex mb-0 me-auto"> 196 <a href="/" class="lead"> 197 <span id="logo-light" class="bi mx-3 align-middle" width="40" height="32"> 198 <img src="/img/logo_light.png" alt="" height="32" class="nofancybox"> 199 </span> 200 <span id="logo-dark" class="bi mx-3 align-middle" width="40" height="32"> 201 <img src="/img/logo_dark.png" alt="" height="32" class="nofancybox"> 202 </span> 203 <!-- <span class="mx-3 fs-4 fw-light d-none d-md-block"></span> --> 204 </a> 205 <!-- <div class="d-none d-lg-block"> 206 <div class="alert alert-info alert-dismissible fade show m-0 p-0" role="alert"> 207 <span class="text-muted fw-light"> 208 <span class="align-middle mx-2"> 209 忬¢è¿ä¸ªå客主é¢ï¼æ¬¢è¿å°è¯
209<a class="link-underline link-underline-opacity-0" target="_blank" rel="noopener" href="https://github.com/LOnion1124/hexo-theme-onion">Theme Onion</a>ï¼ 210 </span> 211 <button type="button" class="btn" data-bs-dismiss="alert"><i class="bi bi-x-lg"></i></button> 212 </span> 213 </div> 214 </div> --> 215 </span> 216 <span> 217 218 <button type="button" class="btn btn-outline-primary" id="search-button" data-bs-toggle="modal" data-bs-target="#searchModal"> 219 <i class="bi bi-search"></i> 220 æç´¢ 221 </button> 222 <div class="modal fade" id="searchModal"> 223 <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document"> 224 <div class="modal-content"> 225 <div class="modal-header"> 226 <!-- <h4 class="fw-light pb-1 mb-2 d-block"><i class="bi bi-search"></i> æç´¢</h4> --> 227 <span class="fs-4 me-2 text-muted"><i class="bi bi-search"></i></span> 228 <input type="text" class="form-control" id="local-search-input" placeholder="å ³é®è¯â¦â¦"> 229 </div> 230 <div class="modal-body"> 231 <div class="search-content" id="local-search-result"></div> 232 <div class="mx-3 text-muted"><i class="bi bi-check2-all"> </i>ææ æ´å¤ç»æ</div> 233 </div> 234 </div> 235 </div> 236</div> 237 238 </span> 239 </div> 240</header></div> 241 242 243 244 <div class="px-2 px-md-0 container"> 245 <div class="row"> 246 <!-- 左边æ --> 247 <div class="col-lg-4 d-none d-lg-block"> 248 <div class="position-sticky" style="top: 1.5rem;"> 249 <!-- é¦é¡µ / éæç« 页 --> 250 251 252 <!-- æç« 页 --> 253 254 <!-- æè¦ --> 255 256 <div class="p-2 mb-3 bg-light-subtle rounded text-center shadow-sm"> 257 258 259 <div class="text-muted fs-4 fw-light border-bottom pb-1 mb-2"><i class="bi bi-blockquote-left"></i> æè¦</div> 260 <div class="p-2 text-muted">è¾å ¥è¾åºãå å管çãæéçæéç»èå常ç¨åºå½æ°ä»¥åå°ä¼è¯æ³çä»ç»ï¼ä¸ºæµæ±å¤§å¦ç«ºå¯æ¡¢å¦é¢âç¨åºè®¾è®¡ä¸ç®æ³åºç¡âè¾ å¦è®¡åç¼åã</div> 261 262 </div> 263 264 265 <!-- ç®å½ --> 266 267 <div class="p-2 mb-3 border rounded shadow-sm"> 268 <div class="text-center fs-4 fw-light text-muted border-bottom pb-1 mb-2"><i class="bi bi-bookmark-dash"></i> ç®å½</div> 269 <div id="toc" class="px-2"></div> 270
271<script src="/js/toc.js"></script>
271 272 273 </div> 274 275 276 <hr> 277 <!-- æ ç¾ --> 278 <div class="px-4 py-2"> 279 <h4 class="fw-light infobar-tags"><i class="bi bi-tags"></i> æ ç¾</h4> 280 <div class="mt-2 px-2 pt-2"><a class="site-tag-link" href="/tags/C/" rel="tag">C<span class="site-tag-count">1</span></a> <a class="site-tag-link" href="/tags/SICP/" rel="tag">SICP<span class="site-tag-count">1</span></a> <a class="site-tag-link" href="/tags/hexo-onion/" rel="tag">hexo-onion<span class="site-tag-count">1</span></a> <a class="site-tag-link" href="/tags/%E5%89%8D%E7%AB%AF/" rel="tag">å端<span class="site-tag-count">1</span></a> <a class="site-tag-link" href="/tags/%E5%B8%83%E5%B0%94%E4%BB%A3%E6%95%B0/" rel="tag">å¸å°ä»£æ°<span class="site-tag-count">1</span></a> <a class="site-tag-link" href="/tags/%E6%95%B0%E5%AD%97%E9%80%BB%E8%BE%91%E8%AE%BE%E8%AE%A1/" rel="tag">æ°åé»è¾è®¾è®¡<span class="site-tag-count">1</span></a> <a class="site-tag-link" href="/tags/%E7%BC%96%E7%A8%8B%E5%9F%BA%E7%A1%80/" rel="tag">ç¼ç¨åºç¡<span class="site-tag-count">2</span></a> <a class="site-tag-link" href="/tags/%E9%9A%8F%E7%AC%94/" rel="tag">éç¬<span class="site-tag-count">1</span></a></div> 281 </div> 282 <hr> 283 <!-- åç±» --> 284 <div class="px-4 py-2"> 285 <h4 class="fw-light infobar-categories"><i class="bi bi-folder"></i> åç±»</h4> 286 <div class="mt-2 px-2 pt-2"><ul class="site-category-list"><li class="site-category-list-item"><a class="site-category-list-link" href="/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">å¦ä¹ ç¬è®°</a><span class="site-category-list-count">3</span></li><li class="site-category-list-item"><a class="site-category-list-link" href="/categories/%E5%BC%80%E5%8F%91%E6%97%A5%E5%BF%97/">å¼åæ¥å¿</a><span class="site-category-list-count">2</span></li><li class="site-category-list-item"><a class="site-category-list-link" href="/categories/%E6%8A%80%E6%9C%AF%E6%8C%87%E5%8D%97/">ææ¯æå</a><span class="site-category-list-count">2</span></li></ul></div> 287 </div> 288 <hr> 289 <!-- åé¾ --> 290 <div class="px-4 py-2 infobar-friends"> 291 <h4 class="fw-light"><i class="bi bi-link-45deg"></i> åé¾</h4> 292 <div class="mt-2 px-2 pt-2"> 293 <div> 294 <ul class="list-group list-group-flush"> 295 <li class="list-group-item"> 296 <i class="bi bi-dot"></i> 297 <a class="icon-link icon-link-hover link-underline link-un
297derline-opacity-0" target="_blank" rel="noopener" href="https://schabe-antimonfeld.github.io/"> 298 <span class=""> 299 SchabeAntimonfeld 300 </span> 301 <i class="bi bi-arrow-right position-relative" style="top:-0.25rem;"></i> 302 </a> 303 </li> 304 <li class="list-group-item"> 305 <i class="bi bi-dot"></i> 306 <a class="icon-link icon-link-hover link-underline link-underline-opacity-0" target="_blank" rel="noopener" href="https://aaaaa114514-1.github.io/"> 307 <span class=""> 308 aaaaa online 309 </span> 310 <i class="bi bi-arrow-right position-relative" style="top:-0.25rem;"></i> 311 </a> 312 </li> 313 </ul> 314</div> 315 </div> 316 </div> 317 <hr> 318</div> 319 320<div class="modal fade" id="infoModal" role="dialog"> 321 <div class="modal-dialog modal-dialog-centered"> 322 <div class="modal-content"> 323 <div class="modal-header"> 324 <h1 class="modal-title fs-5"> 325 <i class="bi bi-person-vcard"></i> 326 ä¸ªäººä¿¡æ¯ 327 </h1> 328 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 329 </div> 330 <div class="modal-body"> 331 <p class="mb-0">æµæ±å¤§å¦è®¡ç®æºç³»æ¬ç§å¨è¯»ãé®ç®±ï¼[email protected]</p> 332 </div> 333 </div> 334 </div> 335</div> 336 337
338<script src="/js/infobar.js"></script>
338 339 340 </div> 341 342 <!-- å客详æ --> 343 <div class="col-12 col-lg-8"> 344 <div class="mx-0 row justify-content-between bg-light-subtle shadow-sm pt-1 px-1 d-flex flex-nowrap rounded"> 345 <!-- æ é¢ --> 346 <div class="col col-lg-9 align-self-center"> 347 <div class="h2 fw-bold mb-1 text-truncate" title="C è¯è¨ï¼ç»è䏿巧"> 348 <i class="bi bi-book-half"></i> 349 C è¯è¨ï¼ç»è䏿巧 350 </div> 351 </div> 352 353 <div class="col-auto border rounded pt-1 mb-1 d-none d-lg-block fw-light"> 354 <p class="mb-1 text-secondary"> 355 <!-- åç±» --> 356 357 <i class="bi bi-folder"></i> 358 359 <span class="me-1"> 360 <a href="/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" class="link-secondary link-underline-opacity-0"> 361 <span class="post-category">å¦ä¹ ç¬è®°</span> 362 </a></span> 363 364 365 366 <!-- å ä½ --> 367 368 </p> 369 <!-- æ¥æ --> 370 <p class="mb-1 text-secondary"> 371 <i class="bi bi-calendar-check"></i> 2025-12-22 372 </p> 373 </div> 374 </div> 375 376 <!-- æ ç¾ --> 377 <div class="py-2"> 378 379 380 <span class="me-1 badge border"> 381 <a href="/tags/%E7%BC%96%E7%A8%8B%E5%9F%BA%E7%A1%80/" class="link-secondary link-underline-opacity-0"> 382 <i class="bi bi-tags"></i> 383 <span class="post-tag">ç¼ç¨åºç¡</span> 384 </a> 385 </span> 386 387 <span class="me-1 badge border"> 388 <a href="/tags/C/" class="link-secondary link-underline-opacity-0"> 389 <i class="bi bi-tags"></i> 390 <span class="post-tag">C</span> 391 </a> 392 </span> 393 394 395 <!-- åæ°ç»è®¡ --> 396 <span class="me-1 badge border text-secondary"> 397 <i class="bi bi-text-paragraph"></i> 398 195k 399 </span> 400 <!-- é 读æ¶é¿ --> 401 <span class="me-1 badge border text-secondary"> 402 <i class="bi bi-stopwatch"></i> 403 2:43 404 </span> 405 <!-- 访é®ç»è®¡--> 406 <span class="me-1 badge border text-secondary"> 407 <i class="bi bi-fire"></i> <span id="busuanzi_page_pv">...</span> 408 </span> 409 </div> 410 411 <div class="article p-4 pb-0 h-auto border rounded shadow-sm"> 412 <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/hint.css/2.4.1/hint.min.css"><p><img src="/img/cdetails/meme.jpg" style="zoom: 33%;" /></p> 413<h2 id="åå¨åé¢">0 åå¨åé¢</h2> 414<blockquote> 415<p>æ¬è®²ä¹ä½¿ç¨ C99 æ åï¼C99 standard (ISO/IEC 9899:1999)ï¼</p> 416<p>æ¬è®²ä¹åèèµæï¼</p> 417<ul> 418<li>PRATA S. C Primer Plusï¼ç¬¬6çï¼[M]. å§ä½, è¯. å京: 人æ°é®çµåºç社, 4192016.</li> 420<li><a target="_blank" rel="noopener" href="https://www.apiref.com/cpp-zh/c.html">C è¯è¨ - API 421åèææ¡£</a></li> 422</ul> 423</blockquote> 424<p>æ¤å¤ï¼ç¼åè¿ä»½è®²ä¹æ¶ï¼æåå®è¯»è å ·å¤ä¸åæ¡ä»¶ï¼</p> 425<ul> 426<li>å·²æå»ºå¥½ C è¯è¨å¼åç¯å¢ï¼dev-c++ï¼VSCode+gcc/clang 427æè ä»»ä½è½ç¼åå¹¶ä¸ç¼è¯ C 代ç çç¯å¢ï¼</li> 428<li>ææ¡åºç¡ C è¯è¨è¯æ³ç¥è¯ï¼å¯åé <a 429target="_blank" rel="noopener" href="https://learnxinyminutes.com/zh-cn/c/">Learn C in Y 430Minutes</a>ï¼</li> 431</ul> 432<h2 id="è¾å ¥è¾åºæå·§">1 è¾å ¥è¾åºæå·§</h2> 433<h3 id="å符串读å">1.1 å符ï¼ä¸²ï¼è¯»å</h3> 434<h4 id="getchar-å-putchar">1.1.1 <code>getchar()</code> å 435<code>putchar()</code></h4> 436<p>è¾å ¥/è¾åº<strong>ä¸ä¸ª</strong>å符</p> 437<ul> 438<li>å®ä¹å¨ <code>stdio.h</code> å </li> 439<li><code>getchar()</code> ä» <code>stdin</code> 440读å<strong>ä¸ä¸ªå符</strong>ï¼ä¸æå¼æ¢è¡/å车ç空ç½å符</li> 441</ul> 442<p>示ä¾ç¨åºï¼</p> 443<div class="sourceCode" id="cb1"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 444<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a></span> 445<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 446<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
447<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span> ch<span class="op">;</span></span> 448<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a> ch <span class="op">=</span> getchar<span class="op">();</span> <span class="co">// 读åä¸ä¸ªå符</span></span> 449<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a> <span class="cf">while</span> <span class="op">(</span>ch <span class="op">!=</span> <span class="ch">'</span><span class="sc">\n</span><span class="ch">'</span><span class="op">)</span> <span class="op">{</span> <span class="co">// å¯ä»¥è¯»åæ¢è¡ç¬¦</span></span> 450<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>ch <span class="op">==</span> <span class="ch">' '</span><span class="op">)</span></span> 451<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a> putchar<span class="op">(</span>ch<span class="op">);</span> <span class="co">// æå°ä¸ä¸ªå符</span></span> 452<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a> <span class="cf">else</span></span> 453<span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a> putchar<span class="op">(</span>ch <span class="op">+</span> <span class="dv">1</span><span class="op">);</span></span> 454<span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a> ch <span class="op">=</span> getchar<span class="op">();</span> <span class="co">// 读åä¸ä¸ä¸ªå符</span></span> 455<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span> 456<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a> putchar<span class="op">(</span>ch<span class="op">);</span></span> 457<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a></span> 458<span id="cb1-16"><a href="#cb1-16" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 459<span id="cb1-17"><a href="#cb1-17" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 460<p>示ä¾è¾å ¥ï¼</p> 461<pre><code>CALL ME HAL.</code></pre> 462<p>示ä¾è¾åºï¼</p> 463<pre><code>DBMM NF IBM/</code></pre> 464<h4 id="gets-å-puts">1.1.2 <code>gets()</code> å 465<code>puts()</code></h4> 466<p>è¾å ¥/è¾åº<strong>ä¸è¡</strong>å符串</p> 467<p><strong><code>gets()</code>彿°ï¼</strong></p> 468<ul> 469<li>å®ä¹å¨ <code>stdio.h</code> å ï¼å½æ°åå为 470<code>char *gets( char *str );</code></li> 471<li>ä» stdin è¯»å ¥ <code>str</code> 472ææåçå符æ°ç»ï¼ç´å°åç°<strong>æ¢è¡ç¬¦</strong>æåºç°æä»¶å°¾ãå¨è¯»å ¥æ°ç»çæåä¸ä¸ªå符åç«å³åå ¥ç©ºåç¬¦ãæ¢è¡ç¬¦è¢«èå¼ï¼ä½ä¸ä¼åå¨äºç¼å²åºä¸ã</li> 473<li><code>gets()</code> 彿°ä¸è¿è¡è¾¹çæ£æ¥ï¼ä½¿ç¨æ¶éç¡®ä¿ä½ å·²ç»ä¸º 474<code>str</code> åé äºè¶³å¤çå åã</li> 475<li>æåæ¶è¿å <code>str</code> ï¼å¤±è´¥æ¶è¿å空æé 476<code>NULL</code></li> 477</ul> 478<p><strong><code>puts()</code>彿°ï¼</strong></p> 479<ul> 480<li>å®ä¹å¨ <code>stdio.h</code> å ï¼å½æ°åå为 481<code>int puts( const char *str );</code></li> 482<li>åå ¥æ¯ä¸ªæ¥èªç©ºç»æ¢å符串 <code>str</code> çå符åéå æ¢è¡ç¬¦ 483<code>'\n'</code> å°è¾åºæµ <code>stdout</code></li> 484<li>ä¸åå ¥æ¥èª <code>str</code> çç©ºç»æ¢å符</li> 485<li>æåæ¶è¿åéè´å¼ï¼å¤±è´¥æ¶è¿å <code>EOF</code> ï¼è´å¼æ´å常éï¼</li> 486</ul> 487<p>示ä¾ç¨åºï¼</p> 488<div class="sourceCode" id="cb4"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 489<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#define STLEN </span><span class="dv">81</span></span> 490<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">(</span><span class="dt">void</span><span class="op">)</span></span> 491<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 492<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span> words<span class="op">[</span>STLEN<span class="op">];
492</span></span> 493<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a> puts<span class="op">(</span><span class="st">"Enter a string, please."</span><span class="op">);</span></span> 494<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a> gets<span class="op">(</span>words<span class="op">);</span></span> 495<span id="cb4-8"><a href="#cb4-8" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"Your string twice:</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span> 496<span id="cb4-9"><a href="#cb4-9" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%s\n</span><span class="st">"</span><span class="op">,</span> words<span class="op">);</span></span> 497<span id="cb4-10"><a href="#cb4-10" aria-hidden="true" tabindex="-1"></a> puts<span class="op">(</span>words<span class="op">);</span></span> 498<span id="cb4-11"><a href="#cb4-11" aria-hidden="true" tabindex="-1"></a> puts<span class="op">(</span><span class="st">"Done."</span><span class="op">);</span></span> 499<span id="cb4-12"><a href="#cb4-12" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 500<p>å¯ä»¥çåºï¼ä¸è¬æ åµä¸ <code>puts(str)</code> å 501<code>printf("%s\n", str)</code> æ¯çä»·çãç¶èï¼<code>gets(str)</code> 502å <code>scanf("%s", str)</code> 503大夿°æ åµä¸å¹¶ä¸çä»·ã<code>scanf()</code> å <code>gets()</code> 504çåºå«å¨äºå®ä»¬å¦ä½ç¡®å®åç¬¦ä¸²çæ«å°¾ï¼<code>scanf()</code> 505æ´åæ¯âè·ååè¯â彿°ï¼è䏿¯âè·åå符串â彿°ï¼å¦æé¢ççåå¨åºè£ å¾ä¸è¾å ¥è¡ï¼<code>gets()</code> 506ä¼è¯»å第 1 个æ¢è¡ç¬¦ä¹åææçå符ã<code>scanf()</code> 507彿°æä¸¤ç§æ¹æ³ç¡®å®è¾å ¥ç»æãæ 论åªç§æ¹æ³ï¼é½ä»ç¬¬ 1 508个é空ç½å符ä½ä¸ºå符串çå¼å§ãå¦æä½¿ç¨ <code>ï¼ s</code> 509转æ¢è¯´æï¼ä»¥ä¸ä¸ä¸ªç©ºç½å符ï¼ç©ºè¡ãç©ºæ ¼ãå¶è¡¨ç¬¦ææ¢è¡ç¬¦ï¼ä½ä¸ºå符串çç»æï¼å符串ä¸å æ¬ç©ºç½å符)ã妿æå®äºå段宽度ï¼å¦ 510<code>%10s</code> , é£ä¹ <code>scanf()</code> å°è¯»å 10 个å符æè¯»å°ç¬¬ 1 511个空ç½åç¬¦åæ¢ï¼å æ»¡è¶³çæ¡ä»¶å³æ¯ç»æè¾å ¥çæ¡ä»¶ï¼ã</p> 512<h3 id="è¯»åæ ¼å¼å">1.3 è¯»åæ ¼å¼å</h3> 513<table> 514<colgroup> 515<col style="width: 8%" /> 516<col style="width: 27%" /> 517<col style="width: 32%" /> 518<col style="width: 32%" /> 519</colgroup> 520<thead> 521<tr> 522<th>æ ¼å¼ç¬¦</th> 523<th>说æ</th> 524<th><code>printf</code> 示ä¾</th> 525<th><code>scanf</code> 示ä¾</th> 526</tr> 527</thead> 528<tbody> 529<tr> 530<td><code>%d</code></td> 531<td>åè¿å¶æç¬¦å·æ´æ°ï¼<code>int</code>ï¼</td> 532<td><code>printf("%d", 123);</code> â <code>13</code></td> 533<td><code>scanf("%d", &x);</code></td> 534</tr> 535<tr> 536<td><code>%u</code></td> 537<td>åè¿å¶æ ç¬¦å·æ´æ°ï¼<code>unsigned int</code>ï¼</td> 538<td><code>printf("%u", -1);</code> â å¤§æ£æ°ï¼è¡¥ç è§£éï¼</td> 539<td><code>scanf("%u", &x);</code></td> 540</tr> 541<tr> 542<td><code>%c</code></td> 543<td>å个å符ï¼<code>char</code>ï¼</td> 544<td><code>printf("%c", 'A');</code> â <code>A</code></td> 545<td><code>scanf(" %c", &ch);</code>ï¼æ³¨æç©ºæ ¼è·³è¿ç©ºç½ï¼</td> 546</tr> 547<tr> 548<td><code>%s</code></td> 549<td>å符串ï¼ä»¥ <code>\0</code> ç»å°¾ç <code>char[]</code>ï¼</td> 550<td><code>printf("%s", str);</code></td> 551<td><code>scanf("%s", str);</code></td> 552</tr> 553<tr> 554<td><code>%f</code></td> 555<td>åç²¾åº¦æµ®ç¹æ°ï¼<code>float</code>ï¼</td> 556<td><code>printf("%f", 3.14f);</code> â <code>3.140000</code></td> 557<td><code>scanf("%f", &f);</code></td> 558</tr> 559<tr> 560<td><code>%lf</code></td> 561<td>åç²¾åº¦æµ®ç¹æ°ï¼<code>double</code>ï¼</td> 562<td><code>printf("%lf", 3.14159);</code> â <code>3.141590</code></td> 563<td><code>scanf("%lf", &d);</code></td> 564</tr> 565<tr> 566<td><code>%e</code> / <code>%E</code></td> 567<td>ç§å¦è®¡æ°æ³ï¼å°å/大å eï¼</td> 568<td><code>printf("%e", 123.4);</code> â <code>1.234000e+02</code></td> 569<td>â</td> 570</tr> 571<tr> 572<td><code>%x</code> / <code>%X</code></td> 573<td>åå è¿å¶æ´æ°ï¼å°å/大åï¼</td> 574<td><code>printf("%x", 255);</code> â <code>ff</code></td> 575<td><code>scanf("%x", &x);</code></td> 576</tr> 577<tr> 578<td><code>%o</code></td> 579<td>å «è¿å¶æ´æ°</td> 580<td><code>printf("%o", 255);</code> â <code>377</code></td> 581<td><code>scanf("%o", &x);</code></td> 582</tr> 583<tr> 584<td><code>%%</code></td> 585<td>è¾åºåé¢é <code>%</code></td> 586<td><code>printf("%%d");</code> â <code>%d</code></td> 587<td>â</td> 588</tr> 589</tbody> 590</table> 591<p><strong>宽度ä¸ç²¾åº¦æ§å¶ï¼ç¨äº <code>printf()</code>ï¼ï¼</strong></p> 592<ul> 593<li><strong>宽度</strong>ï¼<code>%5d</code> 表示è³å°å 5 594个å符宽度ï¼ä¸è¶³åå·¦è¡¥ç©ºæ ¼ã</li> 595<li><strong>精度</strong>ï¼<code>%.2f</code> 表示ä¿çå°æ°ç¹å 2 596ä½ï¼<code>%.5s</code> 表示æå¤è¾åº 5 个å符ã</li> 597<li>ç»å示ä¾ï¼<code>%8.2f</code> â æ»å®½ 8ï¼å°æ°ä½ 2ã</li> 598</ul> 599<p><strong>æ«æéæ ¼å¼ç¬¦ï¼<code>%[...]</code>ï¼ç¨äº 600<code>scanf()</code>ï¼ï¼</strong></p> 601<p><code>%[...]</code> æ¯ <code>scanf()</code> 602ä¸ä¸ç§å¼ºå¤§çæ ¼å¼æ§å¶ç¬¦ï¼ç¨äº<strong>读å符åæå®å符éåçå符串</strong>ãä¸ 603<code>%s</code> ä¸åï¼<code>%[...]</code> 604å¯ä»¥å å«ç©ºæ ¼ãå¶è¡¨ç¬¦ç空ç½å符ï¼å¹¶è½ç²¾ç¡®æ§å¶åªäºå符被æ¥åææç»ã</p> 605<p>åºæ¬è¯æ³ï¼</p> 606<ul> 607<li><strong><code>%[abc]</code></strong>
607ï¼åªæ¥åå符 608<code>'a'</code>ã<code>'b'</code>ã<code>'c'</code>ï¼éå°å ¶ä»å符ï¼å æ¬ç©ºç½ï¼å³åæ¢ã</li> 609<li><strong><code>%[a-z]</code></strong>ï¼æ¥åä»»æå°ååæ¯ï¼æ¯æèå´è¡¨ç¤ºï¼ã</li> 610<li><strong><code>%[^abc]</code></strong>ï¼<code>^</code> 611表示âååâï¼å³è¯»åç´å°éå° <code>'a'</code>ã<code>'b'</code> æ 612<code>'c'</code> 为æ¢ï¼ä½ä¸å å«è¿äºå符ï¼ã</li> 613<li><strong><code>%[^\n]</code></strong>ï¼è¯»å䏿´è¡ï¼å æ¬ç©ºæ ¼ï¼ï¼ç´å°æ¢è¡ç¬¦ï¼<code>\n</code>ï¼ä¸ºæ¢ï¼ä½ä¸å å« 614<code>\n</code>ï¼ã</li> 615</ul> 616<p>示ä¾ç¨åºï¼</p> 617<div class="sourceCode" id="cb5"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 618<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a></span> 619<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 620<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 621<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> num<span class="op">;</span></span> 622<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">unsigned</span> <span class="dt">int</span> unum<span class="op">;</span></span> 623<span id="cb5-7"><a href="#cb5-7" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span> ch<span class="op">;</span></span> 624<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span> str<span class="op">[</span><span class="dv">20</span><span class="op">];</span></span> 625<span id="cb5-9"><a href="#cb5-9" aria-hidden="true" tabindex="-1"></a> <span class="dt">float</span> f<span class="op">;</span></span> 626<span id="cb5-10"><a href="#cb5-10" aria-hidden="true" tabindex="-1"></a> <span class="dt">double</span> d<span class="op">;</span></span> 627<span id="cb5-11"><a href="#cb5-11" aria-hidden="true" tabindex="-1"></a></span> 628<span id="cb5-12"><a href="#cb5-12" aria-hidden="true" tabindex="-1"></a> <span class="co">// è¾å ¥ç¤ºä¾</span></span> 629<span id="cb5-13"><a href="#cb5-13" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"请è¾å ¥ä¸ä¸ªæ´æ°: "</span><span class="op">);</span></span> 630<span id="cb5-14"><a href="#cb5-14" aria-hidden="true" tabindex="-1"></a> scanf<span class="op">(</span><span class="st">"</span><span class="sc">%d</span><span class="st">"</span><span class="op">,</span> <span class="op">&</span>num<span class="op">);</span></span> 631<span id="cb5-15"><a href="#cb5-15" aria-hidden="true" tabindex="-1"></a></span> 632<span id="cb5-16"><a href="#cb5-16" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"请è¾å ¥ä¸ä¸ªæ ç¬¦å·æ´æ°: "</span><span class="op">);</span></span> 633<span id="cb5-17"><a href="#cb5-17" aria-hidden="true" tabindex="-1"></a> scanf<span class="op">(</span><span class="st">"</span><span class="sc">%u</span><span class="st">"</span><span class="op">,</span> <span class="op">&</span>unum<span class="op">);</span></span> 634<span id="cb5-18"><a href="#cb5-18" aria-hidden="true" tabindex="-1"></a></span> 635<span id="cb5-19"><a href="#cb5-19" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"请è¾å ¥ä¸ä¸ªå符: "</span><span class="op">);</span></span> 636<span id="cb5-20"><a href="#cb5-20" aria-hidden="true" tabindex="-1"></a> scanf<span class="op">(</span><span class="st">" </span><span class="sc">%c</span><span class="st">"</span><span class="op">,</span> <span class="op">&</span>ch<span class="op">);</span> <span class="co">// 注æåå¯¼ç©ºæ ¼ä»¥è·³è¿æ¢è¡ç¬¦</span></span> 637<span id="cb5-21"><a href="#cb5-21" aria-hidden="true" tabindex="-1"></a></span> 638<span id="cb5-22"><a href="#cb5-22" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"请è¾å ¥ä¸ä¸ªåè¯ï¼æ ç©ºæ ¼ï¼: "</span><span class="op">);</span></span> 639<span id="cb5-23"><a href="#cb5-23" aria-hidden="true" tabindex="-1"></a> scanf<span class="op">(</span><span class="st">"</span><span class="sc">%s</span><span class="st">"</span><span class="op">,</span> str<span class="op">);</span> <span class="co">// str æ¯æ°ç»åï¼å·²æ¯æéï¼æ é &</span></span> 640<span id="cb5-24"><a href="#cb5-24" aria-hidden="true" tabindex="-1"></a></span> 641<span id="cb5-25"><a href="#cb5-25" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"请è¾å ¥ä¸ä¸ª float: "</span><span class="op">);</span></span> 642<span id="cb5-26"><a href="#cb5-26" aria-hidden="true" tabindex="-1"></a> scanf<span class="op">(</span><span class="st">"</span><span class="sc">%f</span><span class="st">"</span><span class="op">,</span> <span class="op">&</span>f<span class="op">);</span></span> 643<span id="cb5-27"><a href="#cb5-27" aria-hidden="true" tabindex="-1"></a></span> 644<span id="cb5-28"><a href="#cb5-28" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"请è¾å ¥ä¸ä¸ª double: "</span><span class="op">);</span></span> 645<span id="cb5-29"><a href="#cb5-29" aria-hidden="true" tabindex="-1"></a> scanf<span class="op">(</span><span class="st">"</span><span class="sc">%lf</span><span class="st">"</span><span class="op">,</span> <span class="op">&</span>d<span class="op">);</span></span> 646<span id="cb5-30"><a href="#cb5-30" aria-hidden="true" tabindex="-1"></a></span> 647<span id="cb5-31"><a href="#cb5-31" aria-hidden="true" tabindex="-1"></a> <span class="co">// è¾åºç¤ºä¾</span></span> 648<span id="cb5-32"><a href="#cb5-32" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">\n</span><span class="st">=== è¾åºç»æ ===</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span> 649<span id="cb5-33"><a href="#cb5-33" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"æ´æ° (</span><span class="sc">%%</span><span class="st">d): </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> num<span class="op">);</span></span> 650<span id="cb5-34"><a href="#cb5-34" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"æ ç¬¦å·æ´æ° (</span><span class="sc">%%</span><span class="st">u): </span><span class="sc">%u\n</span><span class="st">"</span><span class="op">,</span> unum<span class="op">);</span></span> 651<span id="cb5-35"><a href="#cb5-35" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"å符 (</span><span class="sc">%%</span><span class="st">c): </span><span class="sc">%c\n</span><span class="st">"</span><span class="op">,</span> ch<span class="op">);</span></span> 652<span id="cb5-36"><a href="#cb5-36" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"å符串 (</span><span class="sc">%%</span><span class="st">s): </span><span class="sc">%s\n</span><span class="st">"</span><span class="op">,</span> str<span class="op">);</span></span> 653<span id="cb5-37"><a href="#cb5-37" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"æµ®ç¹æ° (</span><span class="sc">%%</span><span class="st">f): </span><span class="sc">%f\n</span><span class="st">"</span><span class="op">,</span> f<span class="op">);</span></span> 654<span id="cb5-38"><a href="#cb5-38" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"å精度 (</span><span class="sc">%%</span><span class="st">.3lf): </span><span class="sc">%.3lf\n</span><span class="st">"</span><span class="op">,</span> d<span class="op">);</span> <span class="co">// ä¿ç3ä½å°æ°</span></span> 655<span id="cb5-39"><a href="#cb5-39" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"åå è¿å¶ (</span><span class="sc">%%</span><span class="st">x): </span><span class="sc">%x\n</span><span class="st">"</span><span class="op">,</span> num<span class="op">);</span></span> 656<span id="cb5-40"><a href="#cb5-40" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"ç§å¦è®¡æ°æ³ (</span><span class="sc">%%</span><span class="st">e): </span><span class="sc">%e\n</span><span class="st">"</span><span class="op">,</span> d<span class="op">);</span></span> 657<span id="cb5-41"><a href="#cb5-41" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"宽度ä¸å¯¹é½: </span><span class="sc">%5d</span><span class="st">, </span><span class="sc">%8.2f\n</span><span class="st">"</span><span class="op">,</span> num<span class="op">,</span> f<span class="op">);</span></span> 658<span id="cb5-42"><a href="#cb5-42" aria-hidden="true" tabindex="-1"></a></span> 659<span id="cb5-43"><a href="#cb5-43" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 660<span id="cb5-44"><a href="#cb5-44" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 661<p><strong>注æäºé¡¹ï¼</strong></p> 662<ul> 663<li><code>scanf()</code> ä¸é¤ <code>%c</code> å <code>%[...]</code> 664å¤ï¼ä¼èªå¨è·³è¿å导空ç½ï¼ç©ºæ ¼ãæ¢è¡ãå¶è¡¨ç¬¦ï¼ã</li> 665<li>ä½¿ç¨ <code>%c</code>
666æ¶ï¼è¥å䏿¬¡è¾å ¥çææ¢è¡ç¬¦ï¼é卿 ¼å¼ä¸²ä¸å ç©ºæ ¼ä»¥è·³è¿ã</li> 667<li><code>scanf()</code> ä¸ä¼èªå¨æ£æ¥ç¼å²åºæº¢åºï¼ä½¿ç¨ <code>%s</code> 668æ¶åºéå¶é¿åº¦ï¼å¦ <code>scanf("%19s", str);</code></li> 669<li>å¯¹äº <code>double</code> ç±»åï¼<strong>è¾å ¥å¿ é¡»ç¨ 670<code>%lf</code></strong>ï¼è <code>printf</code> ä¸ <code>%f</code> å 671<code>%lf</code> åå¯ï¼C99 以å <code>%lf</code> ä¸ <code>%f</code> 672çä»·ï¼ã</li> 673<li><code>scanf()</code> è¿åæåæ¥æ¶çåæ°ä¸ªæ°ï¼<code>printf()</code> 674è¿åæåè¾åºçå符æ°ï¼è¥å¤±è´¥åè¿åè´å¼ï¼ã</li> 675</ul> 676<h3 id="æä»¶æä½">1.4 æä»¶æä½</h3> 677<blockquote> 678<p>æ¬èåºç°ç彿°åå®ä¹å¨ <code>stdio.h</code> 头æä»¶ä¸ã</p> 679</blockquote> 680<h4 id="fopen-å-fclose">1.4.1 <code>fopen()</code> å 681<code>fclose()</code></h4> 682<p><strong><code>fopen()</code> 彿°ï¼</strong></p> 683<ul> 684<li>彿°ååï¼<code>FILE *fopen( const char *filename, const char *mode );</code></li> 685<li>æå¼ <code>filename</code> 686ææç¤ºçæä»¶ï¼å¹¶è¿åæåå ³èå°è¯¥æä»¶çæä»¶æµçæéã <code>mode</code> 687ç¨äºç¡®å®æä»¶è®¿é®æ¨¡å¼ã</li> 688<li>è¥æåï¼åè¿åæåæ°æä»¶æµçæéãæµä¸ºå®å ¨ç¼å²ï¼é¤é 689<code>filename</code> 表示ä¸ä¸ªäº¤äºè®¾å¤ãé误æ¶ï¼è¿å空æéã</li> 690</ul> 691<table> 692<colgroup> 693<col style="width: 20%" /> 694<col style="width: 13%" /> 695<col style="width: 25%" /> 696<col style="width: 20%" /> 697<col style="width: 20%" /> 698</colgroup> 699<thead> 700<tr> 701<th>æä»¶è®¿é®æ¨¡å¼</th> 702<th>å«ä¹</th> 703<th>è§£é</th> 704<th>è¥æä»¶å·²åå¨</th> 705<th>è¥æä»¶ä¸åå¨</th> 706</tr> 707</thead> 708<tbody> 709<tr> 710<td><code>"r"</code></td> 711<td>读</td> 712<td>æå¼æä»¶ä»¥è¯»å</td> 713<td>ä»å¤´è¯»</td> 714<td>æå¼å¤±è´¥</td> 715</tr> 716<tr> 717<td><code>"w"</code></td> 718<td>å</td> 719<td>å建æä»¶ä»¥åå ¥</td> 720<td>鿝å 容</td> 721<td>åå»ºæ°æä»¶</td> 722</tr> 723<tr> 724<td><code>"a"</code></td> 725<td>åé</td> 726<td>åéå°æä»¶</td> 727<td>åå°ç»å°¾</td> 728<td>åå»ºæ°æä»¶</td> 729</tr> 730<tr> 731<td><code>"r+"</code></td> 732<td>读æ©å±</td> 733<td>æå¼æä»¶ä»¥è¯»/å</td> 734<td>ä»å¤´è¯»</td> 735<td>é误</td> 736</tr> 737<tr> 738<td><code>"w+"</code></td> 739<td>åæ©å±</td> 740<td>å建æä»¶ä»¥è¯»/å</td> 741<td>鿝å 容</td> 742<td>åå»ºæ°æä»¶</td> 743</tr> 744<tr> 745<td><code>"a+"</code></td> 746<td>åéæ©å±</td> 747<td>æå¼æä»¶ä»¥è¯»/å</td> 748<td>åå°ç»å°¾</td> 749<td>åå»ºæ°æä»¶</td> 750</tr> 751</tbody> 752</table> 753<p><strong><code>fclose()</code> 彿°ï¼</strong></p> 754<ul> 755<li>彿°ååï¼<code>int fclose( FILE *stream );</code></li> 756<li>å ³éç»å®çæä»¶æµãå²å ¥ä»»ä½æªåå ¥çç¼å²æ°æ®å° OS 757ãèå¼ä»»ä½æªè¯»åçç¼å²æ°æ®ã</li> 758<li>è¥å¨ <code>fclose</code> è¿ååä½¿ç¨æé <code>stream</code> 759çå¼åè¡ä¸ºæªå®ä¹ã</li> 760<li>æåæ¶è¿åå¼ä¸º <code>0</code> ï¼å¦å为 <code>EOF</code> ã</li> 761</ul> 762<h4 id="getc-å-putc">1.4.2 <code>getc()</code> å 763<code>putc()</code></h4> 764<p><code>getc()</code> å <code>putc()</code> 彿°ä¸ 765<code>getchar()</code> å <code>putchar()</code> 766彿°ç±»ä¼¼ãæä¸åçæ¯ï¼è¦åè¯ <code>getc()</code> å <code>putc()</code> 767彿°ä½¿ç¨åªä¸ªæä»¶ãä¸é¢è¿æ¡è¯å¥çæææ¯â仿 åè¾å ¥ä¸è·åä¸ä¸ªå符âï¼</p> 768<div class="sourceCode" id="cb6"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>ch <span class="op">=</span> getchar<span class="op">();</span></span></code></pre></div> 769<p>ç¶èï¼ä¸é¢è¿æ¡è¯å¥çæææ¯âä» <code>fp</code> 770æå®çæä»¶ä¸è·åä¸ä¸ªå符âï¼</p> 771<div class="sourceCode" id="cb7"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>ch <span class="op">=</span> getc<span class="op">(</span>fp<span class="op">);</span></span></code></pre></div> 772<p>䏿¤ç±»ä¼¼ï¼ä¸é¢è¯å¥çæææ¯âæå符 <code>ch</code> æ¾å ¥ 773<code>FILE</code> æé <code>fpout</code> æå®çæä»¶ä¸âï¼</p> 774<div class="sourceCode" id="cb8"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a>putc<span class="op">(</span>ch<span class="op">,</span> fpout<span class="op">);</span></span></code></pre></div> 775<p>å¨ <code>putc()</code> 彿°çåæ°å表ä¸ï¼ç¬¬ 1 776ä¸ªåæ°æ¯å¾ åå ¥çå符ï¼ç¬¬ 2 ä¸ªåæ°æ¯æä»¶æéã</p> 777<h4 id="fgets-å-fputs">1.4.3 <code>fgets()</code> å 778<code>fputs()</code></h4> 779<p><code>fgets()</code> 彿°ç第 1 ä¸ªåæ°å <code>gets()</code>
780彿°ä¸æ ·ï¼ä¹æ¯è¡¨ç¤ºå¨åè¾å ¥ä½ç½®çå°åï¼<code>char *</code> 781ç±»åï¼ï¼ç¬¬2ä¸ªåæ°æ¯ä¸ä¸ªæ´æ°ï¼è¡¨ç¤ºå¾ è¾å ¥å符串ç大å°ï¼æåä¸ä¸ªåæ°æ¯æä»¶æéï¼æå®å¾ 读åçæä»¶ãä¸é¢æ¯ä¸ä¸ªè°ç¨è¯¥å½æ°çä¾åï¼</p> 782<div class="sourceCode" id="cb9"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>fgets<span class="op">(</span>buf<span class="op">,</span> STLEN<span class="op">,</span> fp<span class="op">);</span></span></code></pre></div> 783<p>è¿éï¼<code>buf</code> æ¯ <code>char</code> 784ç±»åæ°ç»çåç§°ï¼<code>STLEN</code> æ¯å符串ç大å°ï¼<code>fp</code> 785æ¯æå <code>FILE</code> çæéã<code>fgets()</code> 彿°è¯»åè¾å ¥ç´å°ç¬¬ 7861 个æ¢è¡ç¬¦çåé¢ï¼æè¯»å°æä»¶ç»å°¾ï¼æè 读å <code>STLEN-1</code> 787个å符ï¼ä»¥ä¸é¢ç <code>fgets()</code> 为ä¾ï¼ãç¶åï¼<code>fgets()</code> 788卿«å°¾æ·»å ä¸ä¸ªç©ºåç¬¦ä½¿ä¹æä¸ºä¸ä¸ªå符串ãå符串ç大尿¯å ¶å符æ°å ä¸ä¸ä¸ªç©ºå符ã</p> 789<p>妿 <code>fgets()</code> 790å¨è¯»å°å符ä¸éä¹å已读å®ä¸æ´è¡ï¼<strong>å®ä¼æè¡¨ç¤ºè¡ç»å°¾çæ¢è¡ç¬¦æ¾å¨ç©ºå符åé¢</strong>ã<code>fgets()</code> 791彿°å¨éå° <code>EOF</code> 792æ¶å°è¿åNULLå¼ï¼å¯ä»¥å©ç¨è¿ä¸æºå¶æ£æ¥æ¯å¦å°è¾¾æä»¶ç»å°¾ï¼å¦ææªéå°EOFåä¹åè¿åä¼ ç»å®çå°åã</p> 793<p><code>fputs()</code> 彿°æ¥åä¸¤ä¸ªåæ°ï¼ç¬¬ 1 个æ¯å符串çå°åï¼ç¬¬ 2 794ä¸ªæ¯æä»¶æéãè¯¥å½æ°æ ¹æ®ä¼ å ¥å°åæ¾å°çå符串åå ¥æå®çæä»¶ä¸ãå 795<code>puts()</code> 彿°ä¸åï¼<code>fputs()</code> 796卿å°å符串æ¶ä¸ä¼å¨å ¶æ«å°¾æ·»å æ¢è¡ç¬¦ãä¸é¢æ¯ä¸ä¸ªè°ç¨è¯¥å½æ°çä¾åï¼</p> 797<div class="sourceCode" id="cb10"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a>fputs<span class="op">(</span>buf<span class="op">,</span> fp<span class="op">);</span></span></code></pre></div> 798<p>è¿éï¼<code>buf</code> æ¯å符串çå°åï¼<code>fp</code> 799ç¨äºæå®ç®æ æä»¶ãç±äº <code>fgets()</code> 800ä¿çäºæ¢è¡ç¬¦ï¼<code>fputs()</code> 801å°±<strong>ä¸ä¼åæ·»å æ¢è¡ç¬¦</strong>ï¼å®ä»¬é åå¾é常好ã</p> 802<h4 id="fscanf-å-fprintf">1.4.4 <code>fscanf()</code> å 803<code>fprintf()</code></h4> 804<p>è¡ä¸ºå <code>scanf()</code> ä¸ <code>printf()</code> 805类似ï¼åºå«æ¯è°ç¨æ¶å¨æ ¼å¼åå符串åä¼ å ¥æä»¶æéæ¥æå®è¯»åçç®æ æä»¶ã</p> 806<p>示ä¾ç¨åºï¼</p> 807<div class="sourceCode" id="cb11"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 808<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdlib.h></span></span> 809<span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><string.h></span></span> 810<span id="cb11-4"><a href="#cb11-4" aria-hidden="true" tabindex="-1"></a><span class="pp">#define MAX </span><span class="dv">41</span></span> 811<span id="cb11-5"><a href="#cb11-5" aria-hidden="true" tabindex="-1"></a></span> 812<span id="cb11-6"><a href="#cb11-6" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 813<span id="cb11-7"><a href="#cb11-7" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 814<span id="cb11-8"><a href="#cb11-8" aria-hidden="true" tabindex="-1"></a> <span class="dt">FILE</span><span class="op">*</span> fp<span class="op">;</span></span> 815<span id="cb11-9"><a href="#cb11-9" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span> words<span class="op">[</span>MAX<span class="op">];</span></span> 816<span id="cb11-10"><a href="#cb11-10" aria-hidden="true" tabindex="-1"></a></span> 817<span id="cb11-11"><a href="#cb11-11" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">((</span>fp <span class="op">=</span> fopen<span class="op">(</span><span class="st">"wordy"</span><span class="op">,</span> <span class="st">"a+"</span><span class="op">))</span> <span class="op">==</span> NULL<span class="op">)</span> <span class="op">{</span></span> 818<span id="cb11-12"><a href="#cb11-12" aria-hidden="true" tabindex="-1"></a> fprintf<span class="op">(</span>stdout<span class="op">,</span> <span class="st">"Can't open </span><span class="sc">\"</span><span class="st">wordy</span><span class="sc">\"</span><span class="st"> file.</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span> 819<span id="cb11-13"><a href="#cb11-13" aria-hidden="true" tabindex="-1"></a> exit<span class="op">(</span>EXIT_FAILURE<span class="op">);</span></span> 820<span id="cb11-14"><a href="#cb11-14" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span> 821<span id="cb11-15"><a href="#cb11-15" aria-hidden="true" tabindex="-1"></a></span> 822<span id="cb11-16"><a href="#cb11-16" aria-hidden="true" tabindex="-1"></a> puts<span class="op">(</span><span class="st">"Enter words to add to the file; press the #"</span><span class="op">);</span></span> 823<span id="cb11-17"><a href="#cb11-17" aria-hidden="true" tabindex="-1"></a> puts<span class="op">(</span><span class="st">"key at the beginning of a line to terminate."</span><span class="op">);</span></span> 824<span id="cb11-18"><a href="#cb11-18" aria-hidden="true" tabindex="-1"></a></span> 825<span id="cb11-19"><a href="#cb11-19" aria-hidden="true" tabindex="-1"></a> <span class="cf">while</span> <span class="op">((</span>fscanf<span class="op">(</span>stdin<span class="op">,</span> <span class="st">"</span><span class="sc">%40s</span><span class="st">"</span><span class="op">,</span> words<span class="op">)</span> <span class="op">==</span> <span class="dv">1</span><span class="op">)</span> <span class="op">&&</span> <span class="op">(</span>words<span class="op">[</span><span class="dv">0</span><span class="op">]</span> <span class="op">!=</span> <span class="ch">'#'</span><span class="op">))</span></span> 826<span id="cb11-20"><a href="#cb11-20" aria-hidden="true" tabindex="-1"></a> fprintf<span class="op">(</span>fp<span class="op">,</span> <span class="st">"</span><span class="sc">%s\n</span><span class="st">"</span><span class="op">,</span> words<span class="op">);</span></span> 827<span id="cb11-21"><a href="#cb11-21" aria-hidden="true" tabindex="-1"></a> puts<span class="op">(</span><span class="st">"File contents:"</span><span class="op">);</span></span> 828<span id="cb11-22"><a href="#cb11-22" aria-hidden="true" tabindex="-1"></a></span> 829<span id="cb11-23"><a href="#cb11-23" aria-hidden="true" tabindex="-1"></a> rewind<span class="op">(</span>fp<span class="op">);</span> <span class="co">/* è¿åå°æä»¶å¼å§å¤ */</span></span> 830<span id="cb11-24"><a href="#cb11-24" aria-hidden="true" tabindex="-1"></a></span> 831<span id="cb11-25"><a href="#cb11-25" aria-hidden="true" tabindex="-1"></a> <span class="cf">while</span> <span class="op">(</span>fscanf<span class="op">(</span>fp<span class="op">,</span> <span class="st">"</span><span class="sc">%s</span><span class="st">"</span><span class="op">,</span> words<span class="op">)</span> <span class="op">==</span> <span class="dv">1</span><span class="op">)</span></span> 832<span id="cb11-26"><a href="#cb11-26" aria-hidden="true" tabindex="-1"></a> puts<span class="op">(</span>words<span class="op">);</span></span> 833<span id="cb11-27"><a href="#cb11-27" aria-hidden="true" tabindex="-1"></a> puts<span class="op">(</span><span class="st">"Done!"</span><span class="op">);</span></span> 834<span id="cb11-28"><a href="#cb11-28" aria-hidden="true" tabindex="-1"></a></span> 835<span id="cb11-29"><a href="#cb11-29" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>fclose<span class="op">(</span>fp<span class="op">)</span> <span class="op">!=</span> <span class="dv">0</span><span class="op">)</span></span> 836<span id="cb11-30"><a href="#cb11-30" aria-hidden="true" tabindex="-1"></a> fprintf<span class="op">(</span>stderr<span class="op">,</span> <span class="st">"Error closing file</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span> 837<span id="cb11-31"><a href="#cb11-31" aria-hidden="true" tabindex="-1"></a></span> 838<span id="cb11-32"><a href="#cb11-32" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 839<span id="cb11-33"><a href="#cb11-33" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 840<p>该ç¨åºå¯ä»¥å¨æä»¶ä¸æ·»å åè¯ãä½¿ç¨ <code>"a+"</code> 841模å¼ï¼ç¨åºå¯ä»¥å¯¹æä»¶è¿è¡è¯»åæä½ã馿¬¡ä½¿ç¨è¯¥ç¨åºï¼å®å°å建 842<code>wordy</code> æä»¶ï¼ä»¥ä¾¿æåè¯åå ¥å ¶ä¸ãéåå使ç¨è¯¥ç¨åºï¼å¯ä»¥å¨ 843<code>wordy</code> æä»¶å颿·»å åè¯ãè½ç¶ <code>"a+"</code> 844模å¼åªå è®¸å¨æä»¶æ«å°¾æ·»å å 容ï¼ä½æ¯è¯¥æ¨¡å¼ä¸å¯ä»¥è¯»æ´ä¸ªæä»¶ã<code>rewind()</code> 845彿°è®©ç¨åºåå°æä»¶å¼å§å¤ï¼æ¹ä¾¿ <code>while</code> 846å¾ªç¯æå°æ´ä¸ªæä»¶çå å®¹ãæ³¨æï¼<code>rewind()</code> 847æ¥åä¸ä¸ªæä»¶æéä½ä¸ºåæ°ã</p> 848<h4 id="fread-å-fwrite">1.4.5 <code>fread()</code> å 849<code>fwrite()</code></h4> 850<p>å¨<strong>äºè¿å¶æ¨¡å¼</strong>ä¸å¯¹æä»¶è¿è¡è¯»åæä½ã</p> 851<blockquote> 852<p>æä»¶çäºè¿å¶å½¢å¼åææ¬å½¢å¼ç主è¦åºå«å¨äºæ°æ®çåå¨åè§£éæ¹å¼ï¼</p> 853<ol type="1"> 854<li><strong>ææ¬å½¢å¼</strong>ï¼ 855<ul> 856<li>以人类å¯è¯»çå符ç¼ç ï¼å¦ ASCIIãUTF-8ï¼å卿°æ®ã</li> 857<li>å 容é常ç±åæ¯ãæ°åã符å·åæ¢è¡ç¬¦çç»æã</li> 858<li>å¯ç´æ¥ç¨ææ¬ç¼è¾å¨ï¼å¦è®°äºæ¬ãVS Codeï¼æå¼å¹¶é 读ã</li> 859<li>ä¾å¦ï¼<code>.txt</code>ã<code>.csv</code>ã<code>.py</code> 860çæä»¶ã</li> 861</ul></li> 862<li><strong>äºè¿å¶å½¢å¼</strong>ï¼ 863<ul> 864<li>以åå§åèï¼0 å 1ï¼å½¢å¼å卿°æ®ï¼ä¸ç»è¿å符ç¼ç 转æ¢ã</li> 865<li>å¯è¡¨ç¤ºä»»ä½ç±»åçæ°æ®ï¼å¦å¾åãé³é¢ã坿§è¡ç¨åºãå缩æä»¶çï¼ã</li> 866<li>éå¸¸æ æ³ç´æ¥ç¨æ®éææ¬ç¼è¾å¨æ£ç¡®é 读ï¼ä¼æ¾ç¤ºä¹±ç ã</li> 867<li>ä¾å¦ï¼<code>.jpg</code>ã<code>.exe</code>ã<code>.mp3</code>ã<code>.zip</code> 868çæä»¶ã</li> 869</ul></li> 870</ol> 871<p>ç®è¨ä¹ï¼<strong>ææ¬æä»¶æ¯äºè¿å¶æä»¶çä¸ä¸ªç¹ä¾</strong>ï¼å ¶å 容éµå¾ªç¹å®å符ç¼ç è§åï¼ä¾¿äºäººç±»é 读ï¼èäºè¿å¶æä»¶æ´éç¨ï¼ç¨äºç²¾ç¡®ä¿ååç§æ°æ®ç»æåéææ¬ä¿¡æ¯ã</p> 872</blockquote> 873<p><strong><code>fwrite()</code> 彿°ï¼</strong></p> 874<p><code>fwrite()</code> 彿°çååå¦ä¸ï¼</p> 875<div class="sourceCode" id="cb12"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="dt">
875size_t</span> fwrite<span class="op">(</span><span class="dt">const</span> <span class="dt">void</span> <span class="op">*</span> <span class="dt">restrict</span> ptr<span class="op">,</span> <span class="dt">size_t</span> size<span class="op">,</span> <span class="dt">size_t</span> nmemb<span class="op">,</span><span class="dt">FILE</span> <span class="op">*</span> <span class="dt">restrict</span> fp<span class="op">);</span></span></code></pre></div> 876<p><code>fwrite()</code> 彿°æäºè¿å¶æ°æ®åå ¥æä»¶ã<code>size_t</code> 877æ¯æ ¹æ®æ åCç±»åå®ä¹çç±»åï¼å®æ¯ <code>sizeof</code> 878è¿ç®ç¬¦è¿åçç±»åï¼éå¸¸æ¯ <code>unsigned int</code> 879ï¼ä½æ¯å®ç°å¯ä»¥éæ©ä½¿ç¨å ¶ä»ç±»åãæé <code>ptr</code> 880æ¯å¾ åå ¥æ°æ®åçå°åã<code>size</code> 881è¡¨ç¤ºå¾ åå ¥æ°æ®åç大å°ï¼ä»¥åè为åä½ï¼ï¼<code>nmemb</code> 882è¡¨ç¤ºå¾ åå ¥æ°æ®åçæ°éãåå ¶ä»å½æ°ä¸æ ·ï¼<code>fp</code> 883æå®å¾ åå ¥çæä»¶ãä¾å¦ï¼è¦ä¿åä¸ä¸ªå¤§å°ä¸º 256 884åèçæ°æ®å¯¹è±¡ï¼å¦æ°ç»ï¼ï¼å¯ä»¥è¿æ ·åï¼</p> 885<div class="sourceCode" id="cb13"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="dt">char</span> buffer<span class="op">[</span><span class="dv">256</span><span class="op">];</span></span> 886<span id="cb13-2"><a href="#cb13-2" aria-hidden="true" tabindex="-1"></a>fwrite<span class="op">(</span>buffer<span class="op">,</span> <span class="dv">256</span><span class="op">,</span> <span class="dv">1</span><span class="op">,</span> fp<span class="op">);</span></span></code></pre></div> 887<p>以ä¸è°ç¨æä¸å 256 åèçæ°æ®ä» <code>buffer</code> 888åå ¥æä»¶ãå¦ä¸¾ä¸ä¾ï¼è¦ä¿åä¸ä¸ªå å« 10 个 <code>double</code> 889ç±»åå¼çæ°ç»ï¼å¯ä»¥è¿æ ·åï¼</p> 890<div class="sourceCode" id="cb14"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="dt">double</span> earnings<span class="op">[</span><span class="dv">10</span><span class="op">];</span></span> 891<span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a>fwrite<span class="op">(</span>earnings<span class="op">,</span> <span class="kw">sizeof</span><span class="op">(</span><span class="dt">double</span><span class="op">),</span> <span class="dv">10</span><span class="op">,</span> fp<span class="op">);</span></span></code></pre></div> 892<p>以ä¸è°ç¨æ <code>earnings</code> æ°ç»ä¸çæ°æ®åå ¥æä»¶ï¼æ°æ®è¢«åæ 10 893åï¼æ¯å齿¯ <code>double</code> ç大å°ã</p> 894<p>注æ <code>fwrite()</code> ååä¸ç 895<code>const void * restrict ptr</code> 声æã<code>fwrite()</code> 896çä¸ä¸ªé®é¢æ¯ï¼å®ç第 1 ä¸ªåæ°ä¸æ¯åºå®çç±»åãä¾å¦ï¼ç¬¬ 1 个ä¾åä¸ä½¿ç¨ 897<code>buffer</code>ï¼å ¶ç±»åæ¯æå <code>char</code> 898çæéï¼è第2个ä¾åä¸ä½¿ç¨ <code>earnings</code> ï¼å ¶ç±»åæ¯æå 899<code>double</code> çæéã</p> 900<p><code>fwrite()</code> 901彿°è¿åæååå ¥é¡¹çæ°éãæ£å¸¸æ åµä¸ï¼è¯¥è¿åå¼å°±æ¯ 902<code>nmemb</code>ï¼ä½å¦æåºç°åå ¥é误ï¼è¿åå¼ä¼æ¯ <code>nmemb</code> 903å°ã</p> 904<p><strong><code>fread()</code> 彿°ï¼</strong></p> 905<p><code>size_t fread()</code> 彿°çååå¦ä¸ï¼</p> 906<div class="sourceCode" id="cb15"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="dt">size_t</span> fread<span class="op">(</span><span class="dt">void</span> <span class="op">*</span> <span class="dt">restrict</span> ptr<span class="op">,</span> <span class="dt">size_t</span> size<span class="op">,</span> <span class="dt">size_t</span> nmemb<span class="op">,</span><span class="dt">FILE</span> <span class="op">*</span> <span class="dt">restrict</span> fp<span class="op">);</span></span></code></pre></div> 907<p><code>fread()</code> 彿°æ¥åçåæ°å <code>fwrite()</code> 908彿°ç¸åãå¨ <code>fread()</code> 彿°ä¸ï¼<code>ptr</code> 909æ¯å¾ 读åæä»¶æ°æ®å¨å åä¸çå°åï¼<code>fp</code> 910æå®å¾ 读åçæä»¶ãè¯¥å½æ°ç¨äºè¯»å被 <code>fwrite()</code> 911åå ¥æä»¶çæ°æ®ãä¾å¦ï¼è¦æ¢å¤ä¸ä¾ä¸ä¿åçå å« 10 个 <code>double</code> 912ç±»åå¼çæ°ç»ï¼å¯ä»¥è¿æ ·åï¼</p> 913<div class="sourceCode" id="cb16"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="dt">double</span> earnings<span class="op">[</span><span class="dv">10</span><span class="op">];
913</span></span> 914<span id="cb16-2"><a href="#cb16-2" aria-hidden="true" tabindex="-1"></a>fread<span class="op">(</span>earnings<span class="op">,</span> <span class="kw">sizeof</span> <span class="op">(</span><span class="dt">double</span><span class="op">),</span> <span class="dv">10</span><span class="op">,</span> fp<span class="op">);</span></span></code></pre></div> 915<p>该è°ç¨æ 10 个 <code>double</code> 大å°ç弿·è´è¿ 916<code>earnings</code> æ°ç»ä¸ã</p> 917<p><code>fread()</code> 918彿°è¿åæå读åé¡¹çæ°éãæ£å¸¸æ åµä¸ï¼è¯¥è¿åå¼å°±æ¯ 919<code>nmemb</code>ï¼ä½å¦æåºç°è¯»åé误æè¯»å°æä»¶ç»å°¾ï¼è¯¥è¿åå¼å°±ä¼æ¯ 920<code>nmemb</code> å°ã</p> 921<h4 id="fseek-å-ftell">1.4.6 <code>fseek()</code> å 922<code>ftell()</code></h4> 923<p><strong><code>fseek()</code> 彿°ï¼</strong></p> 924<p><code>fseek()</code> ç第 1 ä¸ªåæ°æ¯ <code>FILE</code> 925æéï¼æåå¾ æ¥æ¾çæä»¶ï¼<code>fopen()</code> åºè¯¥å·²æå¼è¯¥æä»¶ã</p> 926<p><code>fseek()</code> ç第 2 927ä¸ªåæ°æ¯åç§»éï¼offsetï¼ãè¯¥åæ°è¡¨ç¤ºä»èµ·å§ç¹å¼å§è¦ç§»å¨çè·ç¦»ãè¯¥åæ°å¿ é¡»æ¯ä¸ä¸ª 928<code>long</code> ç±»åçå¼ï¼å¯ä»¥ä¸ºæ£ï¼åç§»ï¼ãè´ï¼åç§»ï¼æ 9290ï¼ä¿æä¸å¨ï¼ã</p> 930<p><code>fseek()</code> ç第 3 ä¸ªåæ°æ¯æ¨¡å¼ï¼è¯¥åæ°ç¡®å®èµ·å§ç¹ã</p> 931<table> 932<thead> 933<tr> 934<th>模å¼</th> 935<th>åç§»éçèµ·å§ç¹</th> 936</tr> 937</thead> 938<tbody> 939<tr> 940<td>SEEK_SET</td> 941<td>æä»¶å¼å§å¤</td> 942</tr> 943<tr> 944<td>SEEK_CUR</td> 945<td>å½åä½ç½®</td> 946</tr> 947<tr> 948<td>SEEK_END</td> 949<td>æä»¶æ«å°¾</td> 950</tr> 951</tbody> 952</table> 953<p>示ä¾ç¨åºï¼</p> 954<div class="sourceCode" id="cb17"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a>fseek<span class="op">(</span>fp<span class="op">,</span> <span class="dv">0</span><span class="bu">L</span><span class="op">,</span> SEEK_SET<span class="op">);</span> <span class="co">// å®ä½è³æä»¶å¼å§å¤</span></span> 955<span id="cb17-2"><a href="#cb17-2" aria-hidden="true" tabindex="-1"></a>fseek<span class="op">(</span>fp<span class="op">,</span> <span class="dv">10</span><span class="bu">L</span><span class="op">,</span> SEEK_SET<span class="op">);</span> <span class="co">// å®ä½è³æä»¶ä¸ç第10个åè</span></span> 956<span id="cb17-3"><a href="#cb17-3" aria-hidden="true" tabindex="-1"></a>fseek<span class="op">(</span>fp<span class="op">,</span> <span class="dv">2</span><span class="bu">L</span><span class="op">,</span> SEEK_CUR<span class="op">);</span> <span class="co">// 仿件å½åä½ç½®åç§»2个åè</span></span> 957<span id="cb17-4"><a href="#cb17-4" aria-hidden="true" tabindex="-1"></a>fseek<span class="op">(</span>fp<span class="op">,</span> <span class="dv">0</span><span class="bu">L</span><span class="op">,</span> SEEK_END<span class="op">);</span> <span class="co">// å®ä½è³æä»¶ç»å°¾</span></span> 958<span id="cb17-5"><a href="#cb17-5" aria-hidden="true" tabindex="-1"></a>fseek<span class="op">(</span>fp<span class="op">,</span> <span class="op">-</span><span class="dv">10</span><span class="bu">L</span><span class="op">,</span> SEEK_END<span class="op">);</span> <span class="co">// 仿件ç»å°¾å¤åé10个åè</span></span></code></pre></div> 959<p>妿ä¸åæ£å¸¸ï¼<code>fseek()</code> çè¿åå¼ä¸º 960<code>0</code>ï¼å¦æåºç°é误ï¼å¦è¯å¾ç§»å¨çè·ç¦»è¶ åºæä»¶çèå´ï¼ï¼å ¶è¿åå¼ä¸º 961<code>-1</code>ã</p> 962<p><strong><code>ftell()</code> 彿°ï¼</strong></p> 963<p><code>ftell()</code> 彿°çè¿åç±»åæ¯ 964<code>long</code>ï¼å®è¿åçæ¯å½åçä½ç½®ã</p> 965<ul> 966<li><p>è¥æµä»¥äºè¿å¶æ¨¡å¼æå¼ï¼åç±æ¤å½æ°è·å¾ç弿¯ä»æä»¶å¼å§çåèæ°ã</p></li> 967<li><p>è¥æµä»¥ææ¬æ¨¡å¼æå¼ï¼åç±æ¤å½æ°è¿åç弿ªæå®ï¼ä¸ä» è¥ä½ä¸º 968<code>fseek()</code> çè¾å ¥æææä¹ã</p></li> 969<li><p>æåæ¶è¿åå¼ä¸ºæä»¶ä½ç½®æç¤ºå¨ï¼è¥å¤±è´¥åçå为 <code>-1L</code> 970ã</p></li> 971</ul> 972<h4 id="fgetpos-å-fsetpos">1.4.7 <code>fgetpos()</code> å 973<code>fsetpos()</code></h4> 974<p><code>fseek()</code> å <code>ftell()</code> 975æ½å¨çé®é¢æ¯ï¼å®ä»¬é½ææä»¶å¤§å°éå¶å¨ <code>long</code> 976ç±»åè½è¡¨ç¤ºçèå´å ãä¹è®¸ 20 977亿åèçèµ·æ¥ç¸å½å¤§ï¼ä½æ¯éçåå¨è®¾å¤ç容éè¿ çå¢é¿ï¼æä»¶ä¹è¶æ¥è¶å¤§ãé´äºæ¤ï¼ANSI 978C 979æ°å¢äºä¸¤ä¸ª<strong>å¤çè¾å¤§æä»¶</strong>çæ°å®ä½å½æ°ï¼<code>fgetpos()</code> 980å <code>fsetpos()</code>ãè¿ä¸¤ä¸ªå½æ°ä¸ä½¿ç¨ <code>long</code> 981ç±»åçå¼è¡¨ç¤ºä½ç½®ï¼å®ä»¬ä½¿ç¨ä¸ç§æ°ç±»åï¼<code>fpos_t</code>ï¼ä»£è¡¨ file 982position typeï¼æä»¶å®ä½ç±»åï¼ã<code>fpos_t</code> 983ç±»å䏿¯åºæ¬ç±»åï¼å®æ ¹æ®å ¶ä»ç±»åæ¥å®ä¹ã<code>fpos_t</code> 984ç±»åçåéææ°æ®å¯¹è±¡å¯ä»¥å¨æä»¶ä¸æå®ä¸ä¸ªä½ç½®ï¼å®ä¸è½æ¯æ°ç»ç±»åï¼é¤æ¤ä¹å¤ï¼æ²¡æå ¶ä»éå¶ãå®ç°å¯ä»¥æä¾ä¸ä¸ªæ»¡è¶³ç¹æ®å¹³å°è¦æ±çç±»åï¼ä¾å¦ï¼<code>fpos_t</code> 985å¯ä»¥å®ç°ä¸ºç»æã</p> 986<p>
986ANSI C å®ä¹äºå¦ä½ä½¿ç¨<code>fpos_t</code> ç±»åã<code>fgetpos()</code> 987彿°çååå¦ä¸ï¼</p> 988<div class="sourceCode" id="cb18"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> fgetpos<span class="op">(</span><span class="dt">FILE</span> <span class="op">*</span> <span class="dt">restrict</span> stream<span class="op">,</span> <span class="dt">fpos_t</span> <span class="op">*</span> <span class="dt">restrict</span> pos<span class="op">);</span></span></code></pre></div> 989<p>è°ç¨è¯¥å½æ°æ¶ï¼å®æ <code>fpos_t</code> ç±»åç弿¾å¨ <code>pos</code> 990æåçä½ç½®ä¸ï¼è¯¥å¼æè¿°äºæä»¶ä¸çä¸ä¸ªä½ç½®ã妿æåï¼<code>fgetpos()</code> 991彿°è¿å 0ï¼å¦æå¤±è´¥ï¼è¿åé 0ã</p> 992<p><code>fsetpos()</code> 彿°çååå¦ä¸ï¼</p> 993<div class="sourceCode" id="cb19"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> fsetpos<span class="op">(</span><span class="dt">FILE</span> <span class="op">*</span>stream<span class="op">,</span> <span class="dt">const</span> <span class="dt">fpos_t</span> <span class="op">*</span>pos<span class="op">);</span></span></code></pre></div> 994<p>è°ç¨è¯¥å½æ°æ¶ï¼ä½¿ç¨ <code>pos</code> æåä½ç½®ä¸ç <code>fpos_t</code> 995ç±»å弿¥è®¾ç½®æä»¶æéæåè¯¥å¼æå®çä½ç½®ã妿æåï¼<code>fsetpos()</code> 996彿°è¿å 0ï¼å¦æå¤±è´¥ï¼åè¿åé 0ã<code>fpos_t</code> 997ç±»åçå¼åºéè¿ä¹åè°ç¨ <code>fgetpos()</code> è·å¾ã</p> 998<h2 id="å å管ç">2 å å管ç</h2> 999<h3 id="å å ååæ å å">2.1 å å ååæ å å</h3> 1000<p><strong>å å å</strong>ï¼heapï¼å<strong>æ å å</strong>ï¼stackï¼æ¯ä¸¤ç§ä¸åçå å管çåºåï¼ä¸»è¦åºå«å¦ä¸ï¼</p> 1001<table> 1002<colgroup> 1003<col style="width: 11%" /> 1004<col style="width: 36%" /> 1005<col style="width: 51%" /> 1006</colgroup> 1007<thead> 1008<tr> 1009<th>ç¹æ§</th> 1010<th>æ å åï¼Stackï¼</th> 1011<th>å å åï¼Heapï¼</th> 1012</tr> 1013</thead> 1014<tbody> 1015<tr> 1016<td><strong>åé æ¹å¼</strong></td> 1017<td>èªå¨åé åéæ¾ï¼ç±ç¼è¯å¨ç®¡çï¼</td> 1018<td>æå¨åé åéæ¾ï¼ç±ç¨åºåè°ç¨ <code>malloc</code>/<code>free</code> 1019ç彿°ï¼</td> 1020</tr> 1021<tr> 1022<td><strong>çå½å¨æ</strong></td> 1023<td>ä½ç¨åç»ææ¶èªå¨éæ¾ï¼å¦å½æ°è¿åï¼</td> 1024<td>ç¨åºåæ¾å¼éæ¾ï¼å¦åä¼å åæ³æ¼</td> 1025</tr> 1026<tr> 1027<td><strong>访é®é度</strong></td> 1028<td>å¿«ï¼å ä½¿ç¨æ æéï¼ç»æç®åï¼</td> 1029<td>è¾æ ¢ï¼éå¨ææ¥æ¾å ååï¼</td> 1030</tr> 1031<tr> 1032<td><strong>å å大å°</strong></td> 1033<td>é常è¾å°ï¼åç³»ç»æ 空é´éå¶ï¼å¦å MBï¼</td> 1034<td>è¾å¤§ï¼åç³»ç»å¯ç¨èæå åéå¶ï¼</td> 1035</tr> 1036<tr> 1037<td><strong>åå¨å 容</strong></td> 1038<td>å±é¨åéã彿°åæ°ãè¿åå°åç</td> 1039<td>卿åé çæ°æ®ï¼å¦æ°ç»ãç»æä½ã对象çï¼</td> 1040</tr> 1041<tr> 1042<td><strong>å®å ¨æ§</strong></td> 1043<td>å®å ¨ï¼èªå¨ç®¡çï¼ä¸ææ³æ¼ï¼</td> 1044<td>é£é©è¾é«ï¼æåºç°å åæ³æ¼ãéæéçï¼</td> 1045</tr> 1046</tbody> 1047</table> 1048<p><strong>举ä¾</strong>ï¼</p> 1049<ul> 1050<li>æ ï¼<code>int x = 10;</code>ï¼å±é¨åéï¼</li> 1051<li>å ï¼<code>int *p = (int *)malloc(sizeof(int));</code>ï¼éæå¨ 1052<code>free(p);</code>ï¼</li> 1053</ul> 1054<p>ç®è¨ä¹ï¼æ ç¨äºä¸´æ¶ãèªå¨ç®¡ççå°æ°æ®ï¼å ç¨äºè¿è¡æ¶å¨æåé çãçå½å¨ææ´é¿çæ°æ®ã</p> 1055<h3 id="ä½ç¨å">2.2 ä½ç¨å</h3> 1056<table> 1057<colgroup> 1058<col style="width: 16%" /> 1059<col style="width: 49%" /> 1060<col style="width: 34%" /> 1061</colgroup> 1062<thead> 1063<tr> 1064<th>ä½ç¨åç±»å</th> 1065<th>说æ</th> 1066<th>示ä¾</th> 1067</tr> 1068</thead> 1069<tbody> 1070<tr> 1071<td>æä»¶ä½ç¨å</td> 1072<td>彿°å¤å£°æï¼ä»å£°æå°æä»¶ç»æå¯è§</td> 1073<td><code>int file_var;</code></td> 1074</tr> 1075<tr> 1076<td>åä½ç¨å</td> 1077<td><code>{}</code> å 声æï¼ä» å¨è¯¥ååå ¶å å±åå¯è§</td> 1078<td><code>int x;</code> å¨ <code>main</code> æ <code>if</code> ä¸</td> 1079</tr> 1080<tr> 1081<td>彿°ååä½ç¨å</td> 1082<td>ä» å¨å½æ°å£°æçåæ°åè¡¨ä¸ææï¼ç¨äºç±»åæ£æ¥</td> 1083<td><code>void f(int a);</code> ä¸ç <code>a</code></td> 1084</tr> 1085<tr> 1086<td>彿°ä½ç¨å</td> 1087<td>ä» ç¨äº <code>goto</code> æ ç¾ï¼å¨æ´ä¸ªå½æ°å å¯è§</td> 1088<td><code>skip:</code> æ ç¾</td> 1089</tr> 1090</tbody> 1091</table> 1092<p>示ä¾ä»£ç ï¼</p> 1093<div class="sourceCode" id="cb20"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 1094<span id="cb20-2"><a href="#cb20-2" aria-hidden="true" tabindex="-1"></a></span> 1095<span id="cb20-3"><a href="#cb20-3" aria-hidden="true" tabindex="-1"></a><span class="co">// ========== æä»¶ä½ç¨åï¼file scopeï¼==========</span></span> 1096<span id="cb20-4"><a href="#cb20-4" aria-hidden="true" tabindex="-1"></a><span class="co">// å¨å½æ°å¤é¨å£°æçåéå ·ææä»¶ä½ç¨åï¼ä»å£°æå¤å°æä»¶æ«å°¾é½å¯è§</span></span> 1097<span id="cb20-5"><a href="#cb20-5" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> file_var <span class="op">=</span> <span class="dv">100</span><span class="op">;</span> <span class="co">// å ¨å±åéï¼æä»¶ä½ç¨å</span></span> 1098<span id="cb20-6"><a href="#cb20-6" aria-hidden="true" tabindex="-1"></a><span class="dt">static</span> <span class="dt">int</span> static_file_var <span class="op">=</span></span> 1099<span id="cb20-7"><a href="#cb20-7" aria-hidden="true" tabindex="-1"></a> <span class="dv">200</span><span class="op">;</span> <span class="co">// éæå ¨å±åéï¼ä» 卿¬æä»¶å å¯è§ï¼ä»å±æä»¶ä½ç¨åï¼</span></span> 1100<span id="cb20-8"><a href="#cb20-8" aria-hidden="true" tabindex="-1"></a></span> 1101<span id="cb20-9"><a href="#cb20-9" aria-hidden="true" tabindex="-1"></a><span class="co">// 彿°å£°æï¼ååï¼ââå½¢åå±äºå½æ°ååä½ç¨å</span></span> 1102<span id="cb20-10"><a href="#cb20-10" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> demo_function<span class="op">(</span><span class="dt">int</span> a<span class="op">,</span></span> 1103<span id="cb20-11"><a href="#cb20-11" aria-hidden="true" tabindex="-1"></a>
1103 <span class="dt">int</span> b<span class="op">);</span> <span class="co">// a å b çä½ç¨åä» éäºæ¬å·å ï¼å½æ°ååä½ç¨åï¼</span></span> 1104<span id="cb20-12"><a href="#cb20-12" aria-hidden="true" tabindex="-1"></a></span> 1105<span id="cb20-13"><a href="#cb20-13" aria-hidden="true" tabindex="-1"></a><span class="co">// ========== 䏻彿° ==========</span></span> 1106<span id="cb20-14"><a href="#cb20-14" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 1107<span id="cb20-15"><a href="#cb20-15" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1108<span id="cb20-16"><a href="#cb20-16" aria-hidden="true" tabindex="-1"></a> <span class="co">// ========== åä½ç¨åï¼block scopeï¼==========</span></span> 1109<span id="cb20-17"><a href="#cb20-17" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> main_var <span class="op">=</span> <span class="dv">10</span><span class="op">;</span> <span class="co">// åä½ç¨åï¼å±äº main 彿°åï¼</span></span> 1110<span id="cb20-18"><a href="#cb20-18" aria-hidden="true" tabindex="-1"></a> <span class="op">{</span></span> 1111<span id="cb20-19"><a href="#cb20-19" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> inner_var <span class="op">=</span> <span class="dv">20</span><span class="op">;</span> <span class="co">// å å±åä½ç¨åï¼åªå¨ { } å å¯è§</span></span> 1112<span id="cb20-20"><a href="#cb20-20" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"main_var = </span><span class="sc">%d</span><span class="st">, inner_var = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> main_var<span class="op">,</span> inner_var<span class="op">);</span></span> 1113<span id="cb20-21"><a href="#cb20-21" aria-hidden="true" tabindex="-1"></a></span> 1114<span id="cb20-22"><a href="#cb20-22" aria-hidden="true" tabindex="-1"></a> <span class="co">// éæ°å®ä¹ main_varï¼é®è½å¤é¨ç main_varï¼</span></span> 1115<span id="cb20-23"><a href="#cb20-23" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> main_var <span class="op">=</span> <span class="dv">30</span><span class="op">;</span></span> 1116<span id="cb20-24"><a href="#cb20-24" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"å é¨åä¸ main_var = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> main_var<span class="op">);</span></span> 1117<span id="cb20-25"><a href="#cb20-25" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span> 1118<span id="cb20-26"><a href="#cb20-26" aria-hidden="true" tabindex="-1"></a> <span class="co">// æ¤å¤ inner_var ä¸å¯è§</span></span> 1119<span id="cb20-27"><a href="#cb20-27" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"å¤é¨ main_var = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> main_var<span class="op">);</span></span> 1120<span id="cb20-28"><a href="#cb20-28" aria-hidden="true" tabindex="-1"></a></span> 1121<span id="cb20-29"><a href="#cb20-29" aria-hidden="true" tabindex="-1"></a> <span class="co">// è®¿é®æä»¶ä½ç¨ååé</span></span> 1122<span id="cb20-30"><a href="#cb20-30" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"file_var = </span><span class="sc">%d</span><span class="st">, static_file_var = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> file_var<span class="op">,</span> static_file_var<span class="op">);</span></span> 1123<span id="cb20-31"><a href="#cb20-31" aria-hidden="true" tabindex="-1"></a></span> 1124<span id="cb20-32"><a href="#cb20-32" aria-hidden="true" tabindex="-1"></a> <span class="co">// è°ç¨å½æ°</span></span> 1125<span id="cb20-33"><a href="#cb20-33" aria-hidden="true" tabindex="-1"></a> demo_function<span class="op">(</span><span class="dv">5</span><span class="op">,</span> <span class="dv">6</span><span class="op">);</span></span> 1126<span id="cb20-34"><a href="#cb20-34" aria-hidden="true" tabindex="-1"></a></span> 1127<span id="cb20-35"><a href="#cb20-35" aria-hidden="true" tabindex="-1"></a> <span class="co">
1127// ========== 彿°ä½ç¨åï¼ä» ç¨äº goto æ ç¾ï¼==========</span></span> 1128<span id="cb20-36"><a href="#cb20-36" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"æ¼ç¤ºå½æ°ä½ç¨åï¼goto æ ç¾ï¼ï¼</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span> 1129<span id="cb20-37"><a href="#cb20-37" aria-hidden="true" tabindex="-1"></a> <span class="cf">goto</span> skip<span class="op">;</span> <span class="co">// goto æ ç¾å¨æ´ä¸ªå½æ°å å¯è§ï¼å½æ°ä½ç¨åï¼</span></span> 1130<span id="cb20-38"><a href="#cb20-38" aria-hidden="true" tabindex="-1"></a></span> 1131<span id="cb20-39"><a href="#cb20-39" aria-hidden="true" tabindex="-1"></a> <span class="op">{</span></span> 1132<span id="cb20-40"><a href="#cb20-40" aria-hidden="true" tabindex="-1"></a> <span class="co">// å³ä½¿å¨åä¸ï¼æ ç¾ä¾ç¶å¯è§</span></span> 1133<span id="cb20-41"><a href="#cb20-41" aria-hidden="true" tabindex="-1"></a> skip<span class="op">:</span></span> 1134<span id="cb20-42"><a href="#cb20-42" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"跳转æåï¼æ ç¾ 'skip' å ·æå½æ°ä½ç¨åã</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span> 1135<span id="cb20-43"><a href="#cb20-43" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span> 1136<span id="cb20-44"><a href="#cb20-44" aria-hidden="true" tabindex="-1"></a></span> 1137<span id="cb20-45"><a href="#cb20-45" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 1138<span id="cb20-46"><a href="#cb20-46" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span> 1139<span id="cb20-47"><a href="#cb20-47" aria-hidden="true" tabindex="-1"></a></span> 1140<span id="cb20-48"><a href="#cb20-48" aria-hidden="true" tabindex="-1"></a><span class="co">// ========== 彿°å®ä¹ ==========</span></span> 1141<span id="cb20-49"><a href="#cb20-49" aria-hidden="true" tabindex="-1"></a><span class="co">// 注æï¼å½æ°å®ä¹ä¸çå½¢åä½ç¨åæ¯å½æ°åä½ç¨åï¼ä¸æ¯ååä½ç¨å</span></span> 1142<span id="cb20-50"><a href="#cb20-50" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> demo_function<span class="op">(</span><span class="dt">int</span> x<span class="op">,</span> <span class="dt">int</span> y<span class="op">)</span></span> 1143<span id="cb20-51"><a href="#cb20-51" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1144<span id="cb20-52"><a href="#cb20-52" aria-hidden="true" tabindex="-1"></a> <span class="co">// x å y 卿´ä¸ªå½æ°ä½ä¸å¯è§ï¼å±äºåä½ç¨åï¼</span></span> 1145<span id="cb20-53"><a href="#cb20-53" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"彿°ä¸ x = </span><span class="sc">%d</span><span class="st">, y = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> x<span class="op">,</span> y<span class="op">);</span></span> 1146<span id="cb20-54"><a href="#cb20-54" aria-hidden="true" tabindex="-1"></a></span> 1147<span id="cb20-55"><a href="#cb20-55" aria-hidden="true" tabindex="-1"></a> <span class="co">// å¯ä»¥è®¿é®æä»¶ä½ç¨ååé</span></span> 1148<span id="cb20-56"><a href="#cb20-56" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"å¨å½æ°ä¸è®¿é® file_var = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> file_var<span class="op">);</span></span> 1149<span id="cb20-57"><a href="#cb20-57" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 1150<blockquote> 1151<p>C è¯è¨ä¸æ²¡æâ彿°ä½ç¨ååéâï¼â彿°ä½ç¨åâç¹æ 1152<strong><code>goto</code> æ ç¾</strong> çå¯è§æ§ã</p> 1153</blockquote> 1154<h3 id="龿¥">2.3 龿¥</h3> 1155<p><strong>龿¥ï¼linkageï¼</strong>å³å®äºä¸ä¸ªæ è¯ç¬¦ï¼å¦åéæå½æ°ï¼æ¯å¦å¯ä»¥å¨å ¶ä»ç¼è¯åå ï¼å³å ¶ä»æºæä»¶ï¼ä¸è¢«è®¿é®ãæ ¹æ®é¾æ¥å±æ§ï¼åéå¯å为以ä¸ä¸ç±»ï¼</p> 1156<ol type="1"> 1157<li><p><strong>å¤é¨é¾æ¥ï¼External Linkageï¼</strong></p> 1158<ul> 1159<li><p>å«ä¹ï¼è¯¥åé卿´ä¸ªç¨åºçå¤ä¸ªæºæä»¶ä¹é´å¯è§ï¼å¯è¢«å ¶ä»æä»¶éè¿ 1160<code>extern</code> 声æè®¿é®ã</p></li> 1161<li><p>å¦ä½å®ä¹ï¼å¨æä»¶ä½ç¨åï¼å³å½æ°å¤é¨ï¼å£°æçé <code>static</code> 1162å ¨å±åéã</p></li> 1163<li><p>示ä¾ï¼</p> 1164<div class="sourceCode" id="cb21"><pre 1165class="sourceCode c"><code class="sourceCode c"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> global_var<span class="op">;</span> <span class="co">
1165// å¤é¨é¾æ¥ï¼å ¶ä»æä»¶å¯ç¨ extern int global_var; å¼ç¨</span></span></code></pre></div></li> 1166</ul></li> 1167<li><p><strong>å é¨é¾æ¥ï¼Internal Linkageï¼</strong></p> 1168<ul> 1169<li><p>å«ä¹ï¼è¯¥åéä» å¨å½åæºæä»¶å å¯è§ï¼å ¶ä»æä»¶æ æ³è®¿é®ã</p></li> 1170<li><p>å¦ä½å®ä¹ï¼å¨æä»¶ä½ç¨åä½¿ç¨ <code>static</code> 1171修饰çå ¨å±åéã</p></li> 1172<li><p>示ä¾ï¼</p> 1173<div class="sourceCode" id="cb22"><pre 1174class="sourceCode c"><code class="sourceCode c"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="dt">static</span> <span class="dt">int</span> file_var<span class="op">;</span> <span class="co">// å é¨é¾æ¥ï¼ä» æ¬æä»¶å¯ç¨</span></span></code></pre></div></li> 1175</ul></li> 1176<li><p><strong>æ 龿¥ï¼No Linkageï¼</strong></p> 1177<ul> 1178<li><p>å«ä¹ï¼è¯¥åéä¸è½è¢«å ¶ä»ä»»ä½ä½ç¨å访é®ï¼ä» å¨å ¶å£°æçä½ç¨åå ææã</p></li> 1179<li><p>éç¨å¯¹è±¡ï¼ææå±é¨åéï¼å æ¬å½æ°åæ°ï¼ï¼æ 论æ¯å¦ä½¿ç¨ 1180<code>auto</code>ã<code>register</code>ï¼æå¨åå 声æçåéã</p></li> 1181<li><p>示ä¾ï¼</p> 1182<div class="sourceCode" id="cb23"><pre 1183class="sourceCode c"><code class="sourceCode c"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> func<span class="op">(</span><span class="dt">void</span><span class="op">)</span> <span class="op">{</span></span> 1184<span id="cb23-2"><a href="#cb23-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> local_var<span class="op">;</span> <span class="co">// æ 龿¥ï¼ä» å¨ func å ææ</span></span> 1185<span id="cb23-3"><a href="#cb23-3" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div></li> 1186</ul></li> 1187</ol> 1188<h3 id="éæåéçå卿">2.4 éæåéçå卿</h3> 1189<p>ä½ç¨åå龿¥æè¿°äºæ è¯ç¬¦çå¯è§æ§ãå卿æè¿°äºéè¿è¿äºæ è¯ç¬¦è®¿é®ç对象ççåæã</p> 1190<p>å¦æå¯¹è±¡å ·æéæå卿ï¼é£ä¹å®å¨ç¨åºçæ§è¡æé´ä¸ç´åå¨ãæä»¶ä½ç¨ååéå ·æéæåå¨æãæ³¨æï¼å¯¹äºæä»¶ä½ç¨ååéï¼å ³é®å 1191<code>static</code> 表æäºå ¶é¾æ¥å±æ§ï¼èéå卿ã以 <code>static</code> 1192声æçæä»¶ä½ç¨ååéå ·æå é¨é¾æ¥ã使¯æ 论æ¯å é¨é¾æ¥è¿æ¯å¤é¨é¾æ¥ï¼ææçæä»¶ä½ç¨ååéé½å ·æéæå卿ã</p> 1193<p><strong>åä½ç¨åéæåéï¼</strong></p> 1194<ul> 1195<li>å¨å½æ°æåå ç¨ <code>static</code> 声æã</li> 1196<li>æ 龿¥ï¼ä½<strong>çå½å¨æä¸ºæ´ä¸ªç¨åº</strong>ã</li> 1197<li>åªåå§å䏿¬¡ï¼å½æ°è°ç¨é´ä¿æå¼ã</li> 1198</ul> 1199<p><strong>å é¨é¾æ¥éæåéï¼</strong></p> 1200<ul> 1201<li>卿件ä½ç¨åç¨ <code>static</code> 声æçå ¨å±åéã</li> 1202<li>ä» å¨<strong>æ¬æºæä»¶å å¯è§</strong>ï¼å ¶ä»æä»¶æ æ³è®¿é®ã</li> 1203</ul> 1204<p><strong>å¤é¨é¾æ¥éæåéï¼</strong></p> 1205<ul> 1206<li>卿件ä½ç¨åå®ä¹çé static å ¨å±åéã</li> 1207<li>å¯è¢«å ¶ä»æä»¶éè¿ <code>extern</code> 声æå¼ç¨ã</li> 1208<li>注æï¼å®ä¹æ¶ä¸ç¨ <code>static</code>ï¼ä¹ä¸ç¨ 1209<code>extern</code>ï¼<code>extern</code> 1210ä» ç¨äºå¨å ¶ä»æä»¶ä¸å£°æå¼ç¨ã</li> 1211</ul> 1212<p>示ä¾ä»£ç ï¼</p> 1213<p>æä»¶ <code>main.c</code></p> 1214<div class="sourceCode" id="cb24"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 1215<span id="cb24-2"><a href="#cb24-2" aria-hidden="true" tabindex="-1"></a></span> 1216<span id="cb24-3"><a href="#cb24-3" aria-hidden="true" tabindex="-1"></a><span class="co">// 声æï¼éå®ä¹ï¼ä¸ä¸ªå¤é¨é¾æ¥çå ¨å±åéï¼å¨ another.c ä¸å®ä¹ï¼</span></span> 1217<span id="cb24-4"><a href="#cb24-4" aria-hidden="true" tabindex="-1"></a><span class="kw">extern</span> <span class="dt">int</span> external_global<span class="op">;</span> <span class="co">// è¿æ¯âå¤é¨é¾æ¥åéâçå¼ç¨å£°æ</span></span> 1218<span id="cb24-5"><a href="#cb24-5" aria-hidden="true" tabindex="-1"></a></span> 1219<span id="cb24-6"><a href="#cb24-6" aria-hidden="true" tabindex="-1"></a><span class="co">// å®ä¹ä¸ä¸ªå é¨é¾æ¥çéæåé</span></span> 1220<span id="cb24-7"><a href="#cb24-7" aria-hidden="true" tabindex="-1"></a><span class="dt">static</span> <span class="dt">int</span> internal_static <span class="op">=</span> <span class="dv">100</span><span class="op">;</span></span> 1221<span id="cb24-8"><a href="#cb24-8" aria-hidden="true" tabindex="-1"></a></span> 1222<span id="cb24-9"><a href="#cb24-9" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> func<span class="op">(</span><span class="dt">void</span><span class="op">)</span></span> 1223<span id="cb24-10"><a href="#cb24-10" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1224<span id="cb24-11"><a href="#cb24-11" aria-hidden="true" tabindex="-1"></a> <span class="co">// åä½ç¨åéæåé</span></span> 1225<span id="cb24-12"><a href="#cb24-12" aria-hidden="true" tabindex="-1"></a> <span class="dt">static</span> <span class="dt">int</span> block_static <span class="op">=</span> <span class="dv">0</span><span class="op">;</span></span> 1226<span id="cb24-13"><a href="#cb24-13" aria-hidden="true" tabindex="-1"></a> block_static <span class="op">+=</span> <span class="dv">10</span><span class="op">;</span></span> 1227<span id="cb24-14"><a href="#cb24-14" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"åéæåé: </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> block_static<span class="op">);</span></span> 1228<span id="cb24-15"><a href="#cb24-15" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span> 1229<span id="cb24-16"><a href="#cb24-16" aria-hidden="true" tabindex="-1"></a></span> 1230<span id="cb24-17"><a href="#cb24-17" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">(</span><span class="dt">void</span><span class="op">)</span></span> 1231<span id="cb24-18"><a href="#cb24-18" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1232<span id="cb24-19"><a href="#cb24-19" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"å é¨é¾æ¥éæåé (main.c): </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> internal_static<span class="op">);</span></span> 1233<span id="cb24-20"><a href="#cb24-20" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"å¤é¨é¾æ¥å ¨å±åé (æ¥èª another.c): </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> external_global<span class="op">);</span></span> 1234<span id="cb24-21"><a href="#cb24-21" aria-hidden="true" tabindex="-1"></a></span> 1235<span id="cb24-22"><a href="#cb24-22" aria-hidden="true" tabindex="-1"></a> func<span class="op">();</span> <span class="co">// 10</span></span> 1236<span id="cb24-23"><a href="#cb24-23" aria-hidden="true" tabindex="-1"></a> func<span class="op">();</span> <span class="co">// 20</span></span> 1237<span id="cb24-24"><a href="#cb24-24" aria-hidden="true" tabindex="-1"></a> func<span class="op">();</span> <span class="co">// 30</span></span> 1238<span id="cb24-25"><a href="#cb24-25" aria-hidden="true" tabindex="-1"></a></span> 1239<span id="cb24-26"><a href="#cb24-26" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 1240<span id="cb24-27"><a href="#cb24-27" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 1241<p>æä»¶ <code>another.c</code></p> 1242<div class="sourceCode" id="cb25"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a><span class="co">// å®ä¹å ·æå¤é¨é¾æ¥çå ¨å±åéï¼æ staticï¼æ externï¼</span></span> 1243<span id="cb25-2"><a href="#cb25-2" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> external_global <span class="op">=</span> <span class="dv">42</span><span class="op">;</span> <span class="co">// å¯è¢«å ¶ä»æä»¶éè¿ extern å¼ç¨</span></span></code></pre></div> 1244<p>ç¼è¯æ¹å¼ï¼GCCï¼ï¼</p> 1245<div class="sourceCode" id="cb26"><pre 1246class="sourceCode bash"><code class="sourceCode bash"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true" tabindex="-1"></a><span class="fu">gcc</span> main.c another.c <span class="at">-o</span> demo</span> 1247<span id="cb26-2"><a href="#cb26-2" aria-hidden="true" tabindex="-1"></a><span class="ex">./demo</span></span></code></pre></div> 1248<p>示ä¾è¾åºï¼</p> 1249<pre><code>å é¨é¾æ¥éæåé (main.c): 100 1250å¤é¨é¾æ¥å ¨å±åé (æ¥èª another.c): 42 1251åéæåé: 10 1252åéæåé: 20 1253åéæåé: 30</code></pre> 1254<h3 id="卿å å管ç">2.5 卿å å管ç</h3> 1255<h4 id="å ååé åéæ¾">2.5.1 å ååé åéæ¾</h4> 1256<p><code>malloc()</code>ã<code>calloc()</code> å <code>free()</code> 1257æ¯æ ååºï¼<code><stdlib.h></code>ï¼æä¾ç卿å å管ç彿°ï¼ç¨äºå¨ç¨åºè¿è¡æ¶ä»å ï¼heapï¼ä¸åé åéæ¾å åã</p> 1258<table> 1259<colgroup> 1260<col style="width: 27%" /> 1261<col style="width: 41%" /> 1262<col style="width: 30%" /> 1263</colgroup> 1264<thead> 1265<tr> 1266<th>彿°</th> 1267<th>ä½ç¨</th> 1268<th>ç¹ç¹</th> 1269</tr> 1270</thead> 1271<tbody> 1272<tr> 1273<td><code>malloc(size_t size)</code></td> 1274<td>åé <code>size</code> åèçæªåå§åå å</td> 1275<td>è¿å <code>void*</code>ï¼å 容为<strong>åå¾å¼</strong></td> 1276</tr> 1277<tr> 1278<td><code>calloc(size_t num, size_t size)</code></td> 1279<td>åé <code>num * size</code> åèå åï¼å¹¶<strong>åå§å为 12800</strong></td> 1281<td>常ç¨äºåé æ°ç»</td> 1282</tr> 1283<tr> 1284<td><code>free(void *ptr)</code></td> 1285<td>éæ¾ä¹åç± 1286<code>malloc</code>/<code>calloc</code>/<code>realloc</code> 1287åé çå å</td> 1288<td><strong>å¿ é¡»é 对使ç¨</strong>ï¼å¦åä¼å¯¼è´å åé®é¢</td> 1289</tr> 1290</tbody> 1291</table> 1292<p>示ä¾ä»£ç ï¼</p> 1293<div class="sourceCode" id="cb28"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb28-1"><a href="#cb28-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 1294<span id="cb28-2"><a href="#cb28-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdlib.h></span><span class="pp"> </span><span class="co">// å å« malloc, calloc, free</span></span> 1295<span id="cb28-3"><a href="#cb28-3" aria-hidden="true" tabindex="-1"></a></span> 1296<span id="cb28-4"><a href="#cb28-4" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 1297<span id="cb28-5"><a href="#cb28-5" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1298<span id="cb28-6"><a href="#cb28-6" aria-hidden="true" tabindex="-1"></a> <span class="co">// 1. ä½¿ç¨ malloc åé å åï¼æªåå§åï¼</span></span> 1299<span id="cb28-7"><a href="#cb28-7" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span><span class="op">*</span> p1 <span class="op">=</span> <span class="op">(</span><span class="dt">int</span><span class="op">*)</span>malloc<span class="op">(</span><span class="dv">5</span> <span class="op">*</span> <span class="kw">sizeof</span><span class="op">(</span><span class="dt">int</span><span class="op">));</span></span> 1300<span id="cb28-8"><a href="#cb28-8" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>p1 <span class="op">==</span> NULL<span class="op">)</span> <span class="op">{</span></span> 1301<span id="cb28-9"><a href="#cb28-9" aria-hidden="true" tabindex="-1"></a> fprintf<span class="op">(</span>stderr<span class="op">,</span> <span class="st">"malloc failed!</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span> 1302<span id="cb28-10"><a href="#cb28-10" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">1</span><span class="op">;</span></span> 1303<span id="cb28-11"><a href="#cb28-11" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span> 1304<span id="cb28-12"><a href="#cb28-12" aria-hidden="true" tabindex="-1"></a> <span class="co">// æå¨åå§å</span></span> 1305<span id="cb28-13"><a href="#cb28-13" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> <span class="op">(</span><span class="dt">int</span> i <span class="op">=</span> <span class="dv">0</span><span class="op">;</span> i <span class="op"><</span> <span class="dv">5</span><span class="op">;</span> i<span class="op">++)</span> <span class="op">{</span></span> 1306<span id="cb28-14"><a href="#cb28-14" aria-hidden="true" tabindex="-1"></a> p1<span class="op">[</span>i<span class="op">]</span> <span class="op">=</span> i <span class="op">+</span> <span class="dv">1</span><span class="op">;</span></span> 1307<span id="cb28-15"><a href="#cb28-15" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span> 1308<span id="cb28-16"><a href="#cb28-16" aria-hidden="true" tabindex="-1"></a></span> 1309<span id="cb28-17"><a href="#cb28-17" aria-hidden="true" tabindex="-1"></a> <span class="co">// 2. ä½¿ç¨ calloc åé å¹¶èªå¨æ¸ é¶</span></span> 1310<span id="cb28-18"><a href="#cb28-18" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span><span class="op">*</span> p2 <span class="op">=</span> <span class="op">(</span><span class="dt">int</span><span class="op">*)</span>calloc<span class="op">(</span><span class="dv">5</span><span class="op">,</span> <span class="kw">sizeof</span><span class="op">(</span><span class="dt">int</span><span class="op">));</span> <span class="co">// ç¸å½äºåé 5个intå¹¶å ¨é¨è®¾ä¸º0</span></span> 1311<span id="cb28-19"><a href="#cb28-19" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>p2 <span class="op">==</span> NULL<span class="op">)</span> <span class="op">{</span></span> 1312<span id="cb28-20"><a href="#cb28-20" aria-hidden="true" tabindex="-1"></a> fprintf<span class="op">(</span>stderr<span class="op">,</span> <span class="st">"calloc failed!</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span> 1313<span id="cb28-21"><a href="#cb28-21" aria-hidden="true" tabindex="-1"></a> free<span class="op">(</span>p1<span class="op">);</span> <span class="co">// 鿾已åé ç p1</span></span> 1314<span id="cb28-22"><a href="#cb28-22" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">1</span><span class="op">;</span></span> 1315<span id="cb28-23"><a href="#cb28-23" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span> 1316<span id="cb28-24"><a href="#cb28-24" aria-hidden="true" tabindex="-1"></a> p2<span class="op">[</span><span class="dv">0</span><span class="op">]</span> <span class="op">=</span> <span class="dv">10</span><span class="op">;</span> <span class="co">
1316// è¦çé¨åé¶å¼</span></span> 1317<span id="cb28-25"><a href="#cb28-25" aria-hidden="true" tabindex="-1"></a></span> 1318<span id="cb28-26"><a href="#cb28-26" aria-hidden="true" tabindex="-1"></a> <span class="co">// æå°ç»æ</span></span> 1319<span id="cb28-27"><a href="#cb28-27" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"malloc array: "</span><span class="op">);</span></span> 1320<span id="cb28-28"><a href="#cb28-28" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> <span class="op">(</span><span class="dt">int</span> i <span class="op">=</span> <span class="dv">0</span><span class="op">;</span> i <span class="op"><</span> <span class="dv">5</span><span class="op">;</span> i<span class="op">++)</span></span> 1321<span id="cb28-29"><a href="#cb28-29" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%d</span><span class="st"> "</span><span class="op">,</span> p1<span class="op">[</span>i<span class="op">]);</span></span> 1322<span id="cb28-30"><a href="#cb28-30" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span> 1323<span id="cb28-31"><a href="#cb28-31" aria-hidden="true" tabindex="-1"></a></span> 1324<span id="cb28-32"><a href="#cb28-32" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"calloc array: "</span><span class="op">);</span></span> 1325<span id="cb28-33"><a href="#cb28-33" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> <span class="op">(</span><span class="dt">int</span> i <span class="op">=</span> <span class="dv">0</span><span class="op">;</span> i <span class="op"><</span> <span class="dv">5</span><span class="op">;</span> i<span class="op">++)</span></span> 1326<span id="cb28-34"><a href="#cb28-34" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%d</span><span class="st"> "</span><span class="op">,</span> p2<span class="op">[</span>i<span class="op">]);</span></span> 1327<span id="cb28-35"><a href="#cb28-35" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span> 1328<span id="cb28-36"><a href="#cb28-36" aria-hidden="true" tabindex="-1"></a></span> 1329<span id="cb28-37"><a href="#cb28-37" aria-hidden="true" tabindex="-1"></a> <span class="co">// 3. éæ¾å åï¼å ³é®æ¥éª¤ï¼ï¼</span></span> 1330<span id="cb28-38"><a href="#cb28-38" aria-hidden="true" tabindex="-1"></a> free<span class="op">(</span>p1<span class="op">);</span> <span class="co">// éæ¾ p1 æåçå å</span></span> 1331<span id="cb28-39"><a href="#cb28-39" aria-hidden="true" tabindex="-1"></a> free<span class="op">(</span>p2<span class="op">);</span> <span class="co">// éæ¾ p2 æåçå å</span></span> 1332<span id="cb28-40"><a href="#cb28-40" aria-hidden="true" tabindex="-1"></a></span> 1333<span id="cb28-41"><a href="#cb28-41" aria-hidden="true" tabindex="-1"></a> <span class="co">// 建议ï¼å°æé置空ï¼é²æ¢æ¬ç©ºæé误ç¨</span></span> 1334<span id="cb28-42"><a href="#cb28-42" aria-hidden="true" tabindex="-1"></a> p1 <span class="op">=</span> NULL<span class="op">;</span></span> 1335<span id="cb28-43"><a href="#cb28-43" aria-hidden="true" tabindex="-1"></a> p2 <span class="op">=</span> NULL<span class="op">;</span></span> 1336<span id="cb28-44"><a href="#cb28-44" aria-hidden="true" tabindex="-1"></a></span> 1337<span id="cb28-45"><a href="#cb28-45" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 1338<span id="cb28-46"><a href="#cb28-46" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 1339<p>示ä¾è¾åºï¼</p> 1340<pre><code>malloc array: 1 2 3 4 5 1341calloc array: 10 0 0 0 0 </code></pre> 1342<h4 id="free-çéè¦æ§">2.5.2 <code>free()</code> çéè¦æ§</h4> 1343<p><strong>鲿¢å åæ³æ¼</strong></p> 1344<ul> 1345<li>妿åé çå åä¸å使ç¨å´ä¸è°ç¨ 1346<code>free()</code>ï¼ç¨åºä¼ä¸ç´å ç¨è¿äºå åã</li> 1347<li>é¿æ¶é´è¿è¡çç¨åºï¼å¦æå¡å¨ãæä½ç³»ç»æå¡ï¼ä¼å å åæ³æ¼æç»è尽系ç»å åï¼å¯¼è´å´©æºææ§è½ä¸¥éä¸éã</li> 1348</ul> 1349<p><strong>ä¿è¯èµæºå¯éç¨</strong></p> 1350<ul> 1351<li>被 <code>free()</code> éæ¾çå åå¯è¢«åç»ç 1352<code>malloc()</code>/<code>calloc()</code> 1353éæ°ä½¿ç¨ï¼æé«å åå©ç¨çã</li> 1354</ul> 1355<p><strong>é¿å æªå®ä¹è¡ä¸º</strong></p> 1356<ul> 1357<li>坹已鿾çå å忬¡ 1358<code>free()</code>
1358ï¼éå¤éæ¾ï¼æåå ¥ï¼æ¬ç©ºæéï¼ï¼ä¼å¯¼è´ç¨åºå´©æºæä¸å¯é¢æµè¡ä¸ºã</li> 1359<li><code>free(NULL)</code> æ¯å®å ¨çï¼æ åå 许ï¼ï¼ä½ 1360<code>free(ä»»æéå å°å)</code> æ¯å±é©çã</li> 1361</ul> 1362<h4 id="常è§é误">2.5.3 常è§é误</h4> 1363<ul> 1364<li><p>å¿è®° <code>free()</code> â å åæ³æ¼<br /> 1365</p></li> 1366<li><p>éå¤ <code>free()</code> â ç¨åºå´©æº<br /> 1367</p></li> 1368<li><p><code>free()</code> æ åéæå符串åé¢é â æªå®ä¹è¡ä¸º</p> 1369<div class="sourceCode" id="cb30"><pre 1370class="sourceCode c"><code class="sourceCode c"><span id="cb30-1"><a href="#cb30-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> a <span class="op">=</span> <span class="dv">10</span><span class="op">;</span></span> 1371<span id="cb30-2"><a href="#cb30-2" aria-hidden="true" tabindex="-1"></a>free<span class="op">(&</span>a<span class="op">);</span> <span class="co">// é误ï¼a 卿 ä¸</span></span> 1372<span id="cb30-3"><a href="#cb30-3" aria-hidden="true" tabindex="-1"></a></span> 1373<span id="cb30-4"><a href="#cb30-4" aria-hidden="true" tabindex="-1"></a><span class="dt">char</span> <span class="op">*</span>s <span class="op">=</span> <span class="st">"hello"</span><span class="op">;</span></span> 1374<span id="cb30-5"><a href="#cb30-5" aria-hidden="true" tabindex="-1"></a>free<span class="op">(</span>s<span class="op">);</span> <span class="co">// é误ï¼"hello" å¨åªè¯»æ°æ®æ®µ</span></span></code></pre></div></li> 1375<li><p>使ç¨å·² <code>free()</code> çæéï¼æ¬ç©ºæéï¼</p> 1376<div class="sourceCode" id="cb31"><pre 1377class="sourceCode c"><code class="sourceCode c"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a>free<span class="op">(</span>p<span class="op">);</span></span> 1378<span id="cb31-2"><a href="#cb31-2" aria-hidden="true" tabindex="-1"></a><span class="op">*</span>p <span class="op">=</span> <span class="dv">10</span><span class="op">;</span> <span class="co">// å±é©ï¼</span></span></code></pre></div></li> 1379</ul> 1380<h2 id="æé">3 æé</h2> 1381<h3 id="æéæä½">3.1 æéæä½</h3> 1382<h4 id="æéå åæ³">3.1.1 æéå åæ³</h4> 1383<ul> 1384<li>æéå åæ´æ°æ¶ï¼ä¸æ¯ç®åå°å¯¹å°åå ååèæ°ï¼èæ¯æ ¹æ®æéææåæ°æ®ç±»åç大å°è¿è¡<strong>缩æ¾</strong>ãä¾å¦ï¼<code>int *p; p + 1</code> 1385å®é 䏿¯ <code>p + sizeof(int)</code>ã</li> 1386<li>åªææåå䏿°ç»ï¼æç´§é»ä½ç½®ï¼ç两个æéæè½å®å ¨ç¸åã</li> 1387<li>对æéå åè¶ åºæ°ç»è¾¹çæ¯æªå®ä¹è¡ä¸ºã</li> 1388</ul> 1389<p>示ä¾ç¨åºï¼</p> 1390<div class="sourceCode" id="cb32"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb32-1"><a href="#cb32-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 1391<span id="cb32-2"><a href="#cb32-2" aria-hidden="true" tabindex="-1"></a></span> 1392<span id="cb32-3"><a href="#cb32-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 1393<span id="cb32-4"><a href="#cb32-4" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1394<span id="cb32-5"><a href="#cb32-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> arr<span class="op">[]</span> <span class="op">=</span> <span class="op">{</span><span class="dv">10</span><span class="op">,</span> <span class="dv">20</span><span class="op">,</span> <span class="dv">30</span><span class="op">,</span> <span class="dv">40</span><span class="op">};</span></span> 1395<span id="cb32-6"><a href="#cb32-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span><span class="op">*</span> p <span class="op">=</span> arr<span class="op">;</span> <span class="co">// p æå arr[0]</span></span> 1396<span id="cb32-7"><a href="#cb32-7" aria-hidden="true" tabindex="-1"></a></span> 1397<span id="cb32-8"><a href="#cb32-8" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"p = </span><span class="sc">%p\n</span><span class="st">"</span><span class="op">,</span> <span class="op">(</span><span class="dt">void</span><span class="op">*)</span>p<span class="op">);</span></span> 1398<span id="cb32-9"><a href="#cb32-9" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"p + 1 = </span><span class="sc">%p</span><span class="st"> (å·®å¼: </span><span class="sc">%ld</span><span class="st"> åè)</span><span class="sc">\n</span><span class="st">"</span><span class="op">,</span> <span class="op">(</span><span class="dt">void</span><span class="op">*)(</span>p <span class="op">+</span> <span class="dv">1</span><span class="op">),</span></span> 1399<span id="cb32-10"><a href="#cb32-10" aria-hidden="true" tabindex="-1"></a>
1399 <span class="op">(</span><span class="dt">char</span><span class="op">*)(</span>p <span class="op">+</span> <span class="dv">1</span><span class="op">)</span> <span class="op">-</span> <span class="op">(</span><span class="dt">char</span><span class="op">*)</span>p<span class="op">);</span></span> 1400<span id="cb32-11"><a href="#cb32-11" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"*(p + 1) = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> <span class="op">*(</span>p <span class="op">+</span> <span class="dv">1</span><span class="op">));</span> <span class="co">// çä»·äº arr[1]</span></span> 1401<span id="cb32-12"><a href="#cb32-12" aria-hidden="true" tabindex="-1"></a></span> 1402<span id="cb32-13"><a href="#cb32-13" aria-hidden="true" tabindex="-1"></a> <span class="co">// æéç¸åï¼ä¸¤ä¸ªåç±»åæéç¸åå¾å°å ç´ ä¸ªæ°ï¼ä¸æ¯åèæ°ï¼ï¼</span></span> 1403<span id="cb32-14"><a href="#cb32-14" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span><span class="op">*</span> q <span class="op">=</span> <span class="op">&</span>arr<span class="op">[</span><span class="dv">3</span><span class="op">];</span></span> 1404<span id="cb32-15"><a href="#cb32-15" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"q - p = </span><span class="sc">%ld\n</span><span class="st">"</span><span class="op">,</span> q <span class="op">-</span> p<span class="op">);</span> <span class="co">// è¾åº 3</span></span> 1405<span id="cb32-16"><a href="#cb32-16" aria-hidden="true" tabindex="-1"></a></span> 1406<span id="cb32-17"><a href="#cb32-17" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 1407<span id="cb32-18"><a href="#cb32-18" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 1408<h4 id="æé常éå常éæé">3.1.2 æé常éå常éæé</h4> 1409<ul> 1410<li><strong>æé常é</strong>ï¼æéæ¬èº«æ¯å¸¸éï¼å°åä¸è½åï¼ï¼ä½æåçå 容å¯ä»¥ä¿®æ¹ã</li> 1411<li><strong>常éæé</strong>ï¼æéæåçå 容æ¯å¸¸éï¼å 容ä¸è½åï¼ï¼ä½æéæ¬èº«å¯ä»¥æåå«å¤ã</li> 1412</ul> 1413<blockquote> 1414<p>è®°å¿æå·§ï¼ä»å³å¾å·¦è¯»å£°æï¼<code>const</code> 1415ç´§æ¨çè°ï¼è°å°±ä¸è½è¢«ä¿®æ¹ã</p> 1416</blockquote> 1417<p><strong>æé常éï¼Pointer is constantï¼</strong></p> 1418<p>å®ä¹ï¼æéçå¼ï¼å³å°åï¼<strong>ä¸è½è¢«ä¿®æ¹</strong>ï¼ä½å¯ä»¥éè¿æéä¿®æ¹ææåçæ°æ®ã</p> 1419<p>è¯æ³ï¼</p> 1420<div class="sourceCode" id="cb33"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb33-1"><a href="#cb33-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="op">*</span> <span class="dt">const</span> ptr <span class="op">=</span> <span class="op">&</span>variable<span class="op">;</span></span></code></pre></div> 1421<p>å«ä¹ï¼<code>ptr</code> æ¯ä¸ä¸ª <code>const</code> æéï¼æå 1422<code>int</code> ç±»åã</p> 1423<p>示ä¾ç¨åºï¼</p> 1424<div class="sourceCode" id="cb34"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 1425<span id="cb34-2"><a href="#cb34-2" aria-hidden="true" tabindex="-1"></a></span> 1426<span id="cb34-3"><a href="#cb34-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 1427<span id="cb34-4"><a href="#cb34-4" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1428<span id="cb34-5"><a href="#cb34-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> a <span class="op">=</span> <span class="dv">10</span><span class="op">,</span> b <span class="op">=</span> <span class="dv">20</span><span class="op">;</span></span> 1429<span id="cb34-6"><a href="#cb34-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span><span class="op">*</span> <span class="dt">const</span> ptr <span class="op">=</span> <span class="op">&</span>a<span class="op">;</span> <span class="co">// ptr 䏿¦åå§åï¼å°±ä¸è½åæåå ¶ä»åé</span></span> 1430<span id="cb34-7"><a href="#cb34-7" aria-hidden="true" tabindex="-1"></a></span> 1431<span id="cb34-8"><a href="#cb34-8" aria-hidden="true" tabindex="-1"></a> <span class="op">*</span>ptr <span class="op">=</span> <span class="dv">100</span><span class="op">;</span>
1431 <span class="co">// åæ³ï¼å¯ä»¥ä¿®æ¹æåçå 容</span></span> 1432<span id="cb34-9"><a href="#cb34-9" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"*ptr = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> <span class="op">*</span>ptr<span class="op">);</span> <span class="co">// è¾åº 100</span></span> 1433<span id="cb34-10"><a href="#cb34-10" aria-hidden="true" tabindex="-1"></a></span> 1434<span id="cb34-11"><a href="#cb34-11" aria-hidden="true" tabindex="-1"></a> <span class="co">// ptr = &b; // é误ï¼ä¸è½ä¿®æ¹ ptr æ¬èº«ï¼ç¼è¯æ¥éï¼</span></span> 1435<span id="cb34-12"><a href="#cb34-12" aria-hidden="true" tabindex="-1"></a></span> 1436<span id="cb34-13"><a href="#cb34-13" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 1437<span id="cb34-14"><a href="#cb34-14" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 1438<p><strong>常éæéï¼Pointer to constantï¼</strong></p> 1439<p>å®ä¹ï¼æéææåç<strong>æ°æ®æ¯åªè¯»ç</strong>ï¼ä¸è½éè¿è¯¥æéä¿®æ¹å 容ï¼ä½æéæ¬èº«å¯ä»¥éæ°èµå¼ã</p> 1440<p>è¯æ³ï¼</p> 1441<div class="sourceCode" id="cb35"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb35-1"><a href="#cb35-1" aria-hidden="true" tabindex="-1"></a><span class="dt">const</span> <span class="dt">int</span> <span class="op">*</span> ptr <span class="op">=</span> <span class="op">&</span>variable<span class="op">;</span></span> 1442<span id="cb35-2"><a href="#cb35-2" aria-hidden="true" tabindex="-1"></a><span class="co">// æçä»·åæ³ï¼</span></span> 1443<span id="cb35-3"><a href="#cb35-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="dt">const</span> <span class="op">*</span> ptr <span class="op">=</span> <span class="op">&</span>variable<span class="op">;</span></span></code></pre></div> 1444<p>å«ä¹ï¼<code>ptr</code> æ¯ä¸ä¸ªæå <code>const int</code> çæéã</p> 1445<p>示ä¾ç¨åºï¼</p> 1446<div class="sourceCode" id="cb36"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb36-1"><a href="#cb36-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 1447<span id="cb36-2"><a href="#cb36-2" aria-hidden="true" tabindex="-1"></a></span> 1448<span id="cb36-3"><a href="#cb36-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 1449<span id="cb36-4"><a href="#cb36-4" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1450<span id="cb36-5"><a href="#cb36-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> a <span class="op">=</span> <span class="dv">10</span><span class="op">,</span> b <span class="op">=</span> <span class="dv">20</span><span class="op">;</span></span> 1451<span id="cb36-6"><a href="#cb36-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="dt">int</span><span class="op">*</span> ptr <span class="op">=</span> <span class="op">&</span>a<span class="op">;</span> <span class="co">// ptr å¯ä»¥æåå«çåéï¼ä½ä¸è½ä¿®æ¹ææå 容</span></span> 1452<span id="cb36-7"><a href="#cb36-7" aria-hidden="true" tabindex="-1"></a></span> 1453<span id="cb36-8"><a href="#cb36-8" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"*ptr = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> <span class="op">*</span>ptr<span class="op">);</span> <span class="co">// å¯ä»¥è¯»å</span></span> 1454<span id="cb36-9"><a href="#cb36-9" aria-hidden="true" tabindex="-1"></a></span> 1455<span id="cb36-10"><a href="#cb36-10" aria-hidden="true" tabindex="-1"></a> <span class="co">// *ptr = 100; // é误ï¼ä¸è½éè¿ ptr ä¿®æ¹ a çå¼</span></span> 1456<span id="cb36-11"><a href="#cb36-11" aria-hidden="true" tabindex="-1"></a></span> 1457<span id="cb36-12"><a href="#cb36-12" aria-hidden="true" tabindex="-1"></a> ptr <span class="op">=</span> <span class="op">&</span>b<span class="op">;</span>
1457 <span class="co">// åæ³ï¼ptr å¯ä»¥æåå ¶ä»åé</span></span> 1458<span id="cb36-13"><a href="#cb36-13" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"*ptr = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> <span class="op">*</span>ptr<span class="op">);</span> <span class="co">// è¾åº 20</span></span> 1459<span id="cb36-14"><a href="#cb36-14" aria-hidden="true" tabindex="-1"></a></span> 1460<span id="cb36-15"><a href="#cb36-15" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 1461<span id="cb36-16"><a href="#cb36-16" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 1462<p><strong>两è ç»åï¼æå常éçæé常é</strong></p> 1463<p>ä¹å¯ä»¥åæ¶ç¦æ¢ä¿®æ¹æéåå ¶ææå 容ï¼</p> 1464<div class="sourceCode" id="cb37"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb37-1"><a href="#cb37-1" aria-hidden="true" tabindex="-1"></a><span class="dt">const</span> <span class="dt">int</span> <span class="op">*</span> <span class="dt">const</span> ptr <span class="op">=</span> <span class="op">&</span>a<span class="op">;</span></span></code></pre></div> 1465<ul> 1466<li><code>ptr</code> ä¸è½æåå«çå°åï¼æéæ¯å¸¸éï¼ã</li> 1467<li><code>*ptr</code> ä¸è½è¢«ä¿®æ¹ï¼æåçæ¯å¸¸éï¼ã</li> 1468</ul> 1469<h4 id="æéç±»å转æ¢">3.1.3 æéç±»å转æ¢</h4> 1470<p>æéä¹é´çèµå¼æ¯æ°å¼ç±»åä¹é´çèµå¼è¦ä¸¥æ ¼ãä¾å¦ï¼ä¸ç¨ç±»å转æ¢å°±å¯ä»¥æ 1471<code>int</code> ç±»åçå¼èµç» <code>double</code> 1472ç±»åçåéï¼ä½æ¯ä¸¤ä¸ªç±»åçæéä¸è½è¿æ ·åã</p> 1473<div class="sourceCode" id="cb38"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb38-1"><a href="#cb38-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> n <span class="op">=</span> <span class="dv">5</span><span class="op">;</span></span> 1474<span id="cb38-2"><a href="#cb38-2" aria-hidden="true" tabindex="-1"></a><span class="dt">double</span> x<span class="op">;</span></span> 1475<span id="cb38-3"><a href="#cb38-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="op">*</span> p1 <span class="op">=</span> <span class="op">&</span>n<span class="op">;</span></span> 1476<span id="cb38-4"><a href="#cb38-4" aria-hidden="true" tabindex="-1"></a><span class="dt">double</span> <span class="op">*</span> pd <span class="op">=</span> <span class="op">&</span>x<span class="op">;</span></span> 1477<span id="cb38-5"><a href="#cb38-5" aria-hidden="true" tabindex="-1"></a>x <span class="op">=</span> n<span class="op">;</span> <span class="co">// éå¼ç±»å转æ¢</span></span> 1478<span id="cb38-6"><a href="#cb38-6" aria-hidden="true" tabindex="-1"></a>pd <span class="op">=</span> p1<span class="op">;</span> <span class="co">// ç¼è¯æ¶é误</span></span></code></pre></div> 1479<p>æ´å¤æçç±»å乿¯å¦æ¤ãå设æå¦ä¸å£°æï¼</p> 1480<div class="sourceCode" id="cb39"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb39-1"><a href="#cb39-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="op">*</span> pt<span class="op">;</span></span> 1481<span id="cb39-2"><a href="#cb39-2" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="op">(*</span>pa<span class="op">)[</span><span class="dv">3</span><span class="op">];</span></span> 1482<span id="cb39-3"><a href="#cb39-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ar1<span class="op">[</span><span class="dv">2</span><span class="op">][</span><span class="dv">3</span><span class="op">];</span></span> 1483<span id="cb39-4"><a href="#cb39-4" aria-hidden="true" tabindex="-1"></a><span class="dv">703</span></span> 1484<span id="cb39-5"><a href="#cb39-5" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ar2<span class="op">[</span><span class="dv">3</span><span class="op">][</span><span class="dv">2</span><span class="op">];
1484</span></span> 1485<span id="cb39-6"><a href="#cb39-6" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="op">**</span>p2<span class="op">;</span> <span class="co">// ä¸ä¸ªæåæéçæé</span></span></code></pre></div> 1486<p>æå¦ä¸çè¯å¥ï¼</p> 1487<div class="sourceCode" id="cb40"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb40-1"><a href="#cb40-1" aria-hidden="true" tabindex="-1"></a>pt <span class="op">=</span> <span class="op">&</span>ar1<span class="op">[</span><span class="dv">0</span><span class="op">][</span><span class="dv">0</span><span class="op">];</span> <span class="co">// 齿¯æåintçæé</span></span> 1488<span id="cb40-2"><a href="#cb40-2" aria-hidden="true" tabindex="-1"></a>pt <span class="op">=</span> ar1<span class="op">[</span><span class="dv">0</span><span class="op">];</span> <span class="co">// 齿¯æåintçæé</span></span> 1489<span id="cb40-3"><a href="#cb40-3" aria-hidden="true" tabindex="-1"></a>pt <span class="op">=</span> ar1<span class="op">;</span> <span class="co">// æ æ</span></span> 1490<span id="cb40-4"><a href="#cb40-4" aria-hidden="true" tabindex="-1"></a>pa <span class="op">=</span> ar1<span class="op">;</span> <span class="co">// 齿¯æåå å«3个intç±»åå ç´ æ°ç»çæé</span></span> 1491<span id="cb40-5"><a href="#cb40-5" aria-hidden="true" tabindex="-1"></a>pa <span class="op">=</span> ar2<span class="op">;</span> <span class="co">// æ æ</span></span> 1492<span id="cb40-6"><a href="#cb40-6" aria-hidden="true" tabindex="-1"></a>p2 <span class="op">=</span> <span class="op">&</span>pt<span class="op">;</span> <span class="co">// both pointer-to-int *</span></span> 1493<span id="cb40-7"><a href="#cb40-7" aria-hidden="true" tabindex="-1"></a><span class="op">*</span>p2 <span class="op">=</span> ar2<span class="op">[</span><span class="dv">0</span><span class="op">];</span> <span class="co">// 齿¯æåintçæé</span></span> 1494<span id="cb40-8"><a href="#cb40-8" aria-hidden="true" tabindex="-1"></a>p2 <span class="op">=</span> ar2<span class="op">;</span> <span class="co">// æ æ</span></span></code></pre></div> 1495<p>注æï¼ä»¥ä¸æ æçèµå¼è¡¨è¾¾å¼è¯å¥ä¸æ¶åç两个æé齿¯æåä¸åçç±»åãä¾å¦ï¼<code>pt</code> 1496æåä¸ä¸ª <code>int</code> ç±»åå¼ï¼è <code>ar1</code> æåä¸ä¸ªå å« 3 个 1497<code>int</code> ç±»åå ç´ çæ°ç»ã类似å°ï¼<code>pa</code> æåä¸ä¸ªå å« 2 1498个 <code>int</code> ç±»åå ç´ çæ°ç»ï¼æä»¥å®ä¸ <code>ar1</code> 1499çç±»åå ¼å®¹ï¼ä½æ¯ <code>ar2</code> æåä¸ä¸ªå å« 2 个 <code>int</code> 1500ç±»åå ç´ çæ°ç»ï¼æä»¥ <code>pa</code> ä¸ <code>ar2</code> ä¸å ¼å®¹ã</p> 1501<p>ä¸é¢çæå两个ä¾åæäºæ£æãåé <code>p2</code> 1502æ¯æåæéçæéï¼å®æåçæéæå <code>int</code>ï¼è <code>ar2</code> 1503æ¯æåæ°ç»çæéï¼è¯¥æ°ç»å å« 2 个 <code>int</code> 1504ç±»åçå ç´ ãæä»¥ï¼<code>p2</code> å <code>ar2</code> çç±»åä¸åï¼ä¸è½æ 1505<code>ar2</code> èµç» <code>p2</code>ã使¯ï¼<code>*p2</code> æ¯æå 1506<code>int</code> çæéï¼ä¸ <code>ar2[0]</code> å ¼å®¹ãå 为 1507<code>ar2[0]</code> æ¯æå该æ°ç»é¦å ç´ ï¼ <code>ar2[0][0]</code> 1508ï¼çæéï¼æä»¥ <code>ar2[0]</code> 乿¯æå <code>int</code> 1509çæéã</p> 1510<p>ä¸è¬èè¨ï¼å¤éè§£å¼ç¨è®©äººè´¹è§£ãä¾å¦ï¼èèä¸é¢ç代ç ï¼</p> 1511<div class="sourceCode" id="cb41"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb41-1"><a href="#cb41-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> x <span class="op">=</span> <span class="dv">20</span><span class="op">;</span></span> 1512<span id="cb41-2"><a href="#cb41-2" aria-hidden="true" tabindex="-1"></a><span class="dt">const</span> <span class="dt">int</span> y <span class="op">=</span> <span class="dv">23</span><span class="op">;</span></span> 1513<span id="cb41-3"><a href="#cb41-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="op">*</span> p1 <span class="op">=</span> <span class="op">&</span>
1513x<span class="op">;</span></span> 1514<span id="cb41-4"><a href="#cb41-4" aria-hidden="true" tabindex="-1"></a><span class="dt">const</span> <span class="dt">int</span> <span class="op">*</span> p2 <span class="op">=</span> <span class="op">&</span>y<span class="op">;</span></span> 1515<span id="cb41-5"><a href="#cb41-5" aria-hidden="true" tabindex="-1"></a><span class="dt">const</span> <span class="dt">int</span> <span class="op">**</span> pp2<span class="op">;</span></span> 1516<span id="cb41-6"><a href="#cb41-6" aria-hidden="true" tabindex="-1"></a>p1 <span class="op">=</span> p2<span class="op">;</span> <span class="co">// ä¸å®å ¨ -- æconstæéèµç»éconstæé</span></span> 1517<span id="cb41-7"><a href="#cb41-7" aria-hidden="true" tabindex="-1"></a>p2 <span class="op">=</span> p1<span class="op">;</span> <span class="co">// ææ -- æéconstæéèµç»constæé</span></span> 1518<span id="cb41-8"><a href="#cb41-8" aria-hidden="true" tabindex="-1"></a>pp2 <span class="op">=</span> <span class="op">&</span>p1<span class="op">;</span> <span class="co">// ä¸å®å ¨ â- åµå¥æéç±»åèµå¼</span></span></code></pre></div> 1519<p>æ <code>const</code> æéèµç»é <code>const</code> 1520æéä¸å®å ¨ï¼å ä¸ºè¿æ ·å¯ä»¥ä½¿ç¨æ°çæéæ¹å <code>const</code> 1521æéæåçæ°æ®ãç¼è¯å¨å¨ç¼è¯ä»£ç æ¶ï¼å¯è½ä¼ç»åºè¦åï¼æ§è¡è¿æ ·çä»£ç æ¯æªå®ä¹çã使¯æé 1522<code>const</code> æéèµç» <code>const</code> 1523æé没é®é¢ï¼åææ¯åªè¿è¡ä¸çº§è§£å¼ç¨ï¼</p> 1524<div class="sourceCode" id="cb42"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb42-1"><a href="#cb42-1" aria-hidden="true" tabindex="-1"></a>p2 <span class="op">=</span> p1<span class="op">;</span> <span class="co">// ææ -- æéconstæéèµç»constæé</span></span></code></pre></div> 1525<p>使¯è¿è¡ä¸¤çº§è§£å¼ç¨æ¶ï¼è¿æ ·çèµå¼ä¹ä¸å®å ¨ï¼ä¾å¦ï¼èèä¸é¢ç代ç ï¼</p> 1526<div class="sourceCode" id="cb43"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb43-1"><a href="#cb43-1" aria-hidden="true" tabindex="-1"></a><span class="dt">const</span> <span class="dt">int</span> <span class="op">**</span>pp2<span class="op">;</span></span> 1527<span id="cb43-2"><a href="#cb43-2" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="op">*</span>p1<span class="op">;</span></span> 1528<span id="cb43-3"><a href="#cb43-3" aria-hidden="true" tabindex="-1"></a><span class="dt">const</span> <span class="dt">int</span> n <span class="op">=</span> <span class="dv">13</span><span class="op">;</span></span> 1529<span id="cb43-4"><a href="#cb43-4" aria-hidden="true" tabindex="-1"></a>pp2 <span class="op">=</span> <span class="op">&</span>p1<span class="op">;</span> <span class="co">// å 许ï¼ä½æ¯è¿å¯¼è´constéå®ç¬¦å¤±æï¼æ ¹æ®ç¬¬1è¡ä»£ç ï¼ä¸è½éè¿*pp2ä¿®æ¹å®ææåçå 容ï¼</span></span> 1530<span id="cb43-5"><a href="#cb43-5" aria-hidden="true" tabindex="-1"></a><span class="op">*</span>pp2 <span class="op">=</span> <span class="op">&</span>n<span class="op">;</span> <span class="co">// ææï¼ä¸¤è é½å£°æä¸ºconstï¼ä½æ¯è¿å°å¯¼è´p1æånï¼*pp2已被修æ¹ï¼</span></span> 1531<span id="cb43-6"><a href="#cb43-6" aria-hidden="true" tabindex="-1"></a><span class="op">*</span>p1 <span class="op">=</span> <span class="dv">10</span><span class="op">;</span> <span class="co">// ææï¼ä½æ¯è¿å°æ¹ånçå¼ï¼ä½æ¯æ ¹æ®ç¬¬3è¡ä»£ç ï¼ä¸è½ä¿®æ¹nçå¼ï¼</span></span></code></pre></div> 1532<h3 id="æé䏿°ç»">3.2 æé䏿°ç»</h3> 1533<p>æ°ç»åæ¯æ°ç»é¦å ç´ çå°åãä¹å°±æ¯è¯´ï¼å¦æ <code>arr</code> 1534æ¯ä¸ä¸ªæ°ç»ï¼ä¸é¢çè¯å¥æç«ï¼</p> 1535<div class="sourceCode" id="cb44"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb44-1"><a href="#cb44-1" aria-hidden="true" tabindex="-1"></a>arr <span class="op">==</span> <span class="op">&</span>arr<span class="op">[</span><span class="dv">0</span><span class="op">];</span> <span class="co">// æ°ç»åæ¯è¯¥æ°ç»é¦å ç´ çå°å</span></span></code></pre></div> 1536<p><code>arr</code> å <code>&arr[0]</code> 1537é½è¡¨ç¤ºæ°ç»é¦å ç´ çå åå°åï¼<code>&</code> 1538æ¯å°åè¿ç®ç¬¦ï¼ã两è 齿¯å¸¸éï¼å¨ç¨åºçè¿è¡è¿ç¨ä¸ä¸ä¼æ¹åã使¯ï¼å¯ä»¥æå®ä»¬èµå¼ç»æéåéï¼ç¶åå¯ä»¥ä¿®æ¹æéåéçå¼ã</p> 1539<h4 id="æåå¤ç»´æ°ç»çæé">3.2.1 æåï¼å¤ç»´ï¼æ°ç»çæé</h4> 1540<p>å设æä¸é¢ç声æï¼</p> 1541<div class="sourceCode" id="cb45"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb45-1"><a href="#cb45-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> zippo<span class="op">[</span><span class="dv">4</span><span class="op">][</span><span class="dv">2</span><span class="op">];
1541</span> <span class="co">/* å å«intæ°ç»çæ°ç» */</span></span></code></pre></div> 1542<p>ç¶åæ°ç»å <code>zippo</code> 1543æ¯è¯¥æ°ç»é¦å ç´ çå°åã卿¬ä¾ä¸ï¼<code>zippo</code> 1544çé¦å ç´ æ¯ä¸ä¸ªå å«ä¸¤ä¸ª <code>int</code> å¼çæ°ç»ï¼æä»¥ 1545<code>zippo</code> æ¯è¿ä¸ªå å«ä¸¤ä¸ª <code>int</code> 1546å¼çæ°ç»çå°åãä¸é¢ï¼æä»¬ä»æéç屿§è¿ä¸æ¥åæã</p> 1547<p>å 为 <code>zippo</code> æ¯æ°ç»é¦å ç´ çå°åï¼æä»¥ <code>zippo</code> 1548çå¼å <code>&zippo[0]</code> çå¼ç¸åãè <code>zippo[0]</code> 1549æ¬èº«æ¯ä¸ä¸ªå å«ä¸¤ä¸ªæ´æ°çæ°ç»ï¼æä»¥ <code>zippo[0]</code> 1550çå¼åå®é¦å ç´ ï¼ä¸ä¸ªæ´æ°ï¼çå°åï¼å³ <code>&zippo[0][0]</code> 1551çå¼ï¼ç¸åãç®èè¨ä¹ï¼<code>zippo[0]</code> æ¯ä¸ä¸ªå ç¨ä¸ä¸ª 1552<code>int</code> 大å°å¯¹è±¡çå°åï¼è <code>zippo</code> æ¯ä¸ä¸ªå ç¨ä¸¤ä¸ª 1553<code>int</code> 1554大å°å¯¹è±¡çå°åãç±äºè¿ä¸ªæ´æ°åå å«ä¸¤ä¸ªæ´æ°çæ°ç»é½å¼å§äºåä¸ä¸ªå°åï¼æä»¥ 1555<code>zippo</code> å <code>zippo[0]</code> çå¼ç¸åã</p> 1556<p>ç»æéæå°åå <code>1</code> 1557ï¼å ¶å¼ä¼å¢å 对åºç±»å大å°çæ°å¼ãå¨è¿æ¹é¢ï¼<code>zippo</code> å 1558<code>zippo[0]</code> ä¸åï¼å 为 <code>zippo</code> æåç对象å ç¨äºä¸¤ä¸ª 1559<code>int</code> 大å°ï¼è <code>zippo[0]</code> æåç对象åªå ç¨ä¸ä¸ª 1560<code>int</code> 大å°ãå æ¤ï¼ <code>zippo + 1</code> å 1561<code>zippo[0] + 1</code> çå¼ä¸åã</p> 1562<p>è§£å¼ç¨ä¸ä¸ªæéï¼å¨æéåä½¿ç¨ <code>*</code> 1563è¿ç®ç¬¦ï¼æå¨æ°ç»åå使ç¨å¸¦ä¸æ ç <code>[]</code> 1564è¿ç®ç¬¦ï¼å¾å°å¼ç¨å¯¹è±¡ä»£è¡¨çå¼ãå 为 <code>zippo[0]</code> 1565æ¯è¯¥æ°ç»é¦å ç´ ï¼ <code>zippo[0][0]</code> ï¼çå°åï¼æä»¥ 1566<code>*(zippo[0])</code> 表示å¨åå¨ <code>zippo[0][0]</code> 1567ä¸çå¼ï¼å³ä¸ä¸ª <code>int</code> 1568ç±»åçå¼ï¼ã䏿¤ç±»ä¼¼ï¼<code>*zippo</code> 代表该æ°ç»é¦å ç´ ï¼ 1569<code>zippo[0]</code> ï¼çå¼ï¼ä½æ¯ <code>zippo[0]</code> æ¬èº«æ¯ä¸ä¸ª 1570<code>int</code> ç±»åå¼çå°åã该å¼çå°åæ¯ 1571<code>&zippo[0][0]</code>ï¼æä»¥ <code>*zippo</code> å°±æ¯ 1572<code>&zippo[0][0]</code> 1573ã对两个表达å¼åºç¨è§£å¼ç¨è¿ç®ç¬¦è¡¨æï¼<code>**zippo</code> ä¸ 1574<code>*&zippo[0][0]</code> çä»·ï¼è¿ç¸å½äº 1575<code>zippo[0][0]</code>ï¼å³ä¸ä¸ª <code>int</code> 1576ç±»åçå¼ãç®èè¨ä¹ï¼<code>zippo</code> 1577æ¯å°åçå°åï¼å¿ 须解å¼ç¨ä¸¤æ¬¡æè½è·å¾åå§å¼ãå°åçå°åææéçæéæ¯å°±æ¯åéé´æ¥ï¼double 1578indirectionï¼çä¾åã</p> 1579<p>示ä¾ç¨åºï¼</p> 1580<div class="sourceCode" id="cb46"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb46-1"><a href="#cb46-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 1581<span id="cb46-2"><a href="#cb46-2" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 1582<span id="cb46-3"><a href="#cb46-3" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1583<span id="cb46-4"><a href="#cb46-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> zippo<span class="op">[</span><span class="dv">4</span><span class="op">][</span><span class="dv">2</span><span class="op">]</span> <span class="op">=</span> <span class="op"><!--</span>swig<span class="dv">0</span><span class="op">-->;</span></span> 1584<span id="cb46-5"><a href="#cb46-5" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"zippo = </span><span class="sc">%p</span><span class="st">, zippo + 1 = </span><span class="sc">%p\n</span><span class="st">"</span><span class="op">,</span> zippo<span class="op">,</span> zippo <span class="op">+</span> <span class="dv">1</span><span class="op">);</span></span> 1585<span id="cb46-6"><a href="#cb46-6" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"zippo[0] = </span><span class="sc">%p</span><span class="st">, zippo[0] + 1 = </span><span class="sc">%p\n</span><span class="st">"</span><span class="op">,</span> zippo<span class="op">[</span><span class="dv">0</span><span class="op">],</span> zippo<span class="op">[</span><span class="dv">0</span><span class="op">]</span> <span class="op">+</span> <span class="dv">1</span><span class="op">);</span></span> 1586<span id="cb46-7"><a href="#cb46-7" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"*zippo = </span><span class="sc">%p</span><span class="st">, *zippo + 1 = </span><span class="sc">%p\n</span><span class="st">"</span><span class="op">,</span> <span class="op">*</span>zippo<span class="op">,</span> <span class="op">*</span>zippo <span class="op">+</span> <span class="dv">1</span><span class="op">);</span></span> 1587<span id="cb46-8"><a href="#cb46-8" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"zippo[0][0] = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> zippo<span class="op">[</span><span class="dv">0</span><span class="op">][</span><span class="dv">0</span><span class="op">]);
1587</span></span> 1588<span id="cb46-9"><a href="#cb46-9" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"*zippo[0] = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> <span class="op">*</span>zippo<span class="op">[</span><span class="dv">0</span><span class="op">]);</span></span> 1589<span id="cb46-10"><a href="#cb46-10" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"**zippo = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> <span class="op">**</span>zippo<span class="op">);</span></span> 1590<span id="cb46-11"><a href="#cb46-11" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"zippo[2][1] = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> zippo<span class="op">[</span><span class="dv">2</span><span class="op">][</span><span class="dv">1</span><span class="op">]);</span></span> 1591<span id="cb46-12"><a href="#cb46-12" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"*(*(zippo+2) + 1) = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> <span class="op">*(*(</span>zippo <span class="op">+</span> <span class="dv">2</span><span class="op">)</span> <span class="op">+</span> <span class="dv">1</span><span class="op">));</span></span> 1592<span id="cb46-13"><a href="#cb46-13" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 1593<span id="cb46-14"><a href="#cb46-14" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 1594<p>示ä¾è¾åºï¼</p> 1595<pre><code>zippo = 0x0064fd38, zippo + 1 = 0x0064fd40 1596zippo[0]= 0x0064fd38, zippo[0] + 1 = 0x0064fd3c 1597*zippo = 0x0064fd38, *zippo + 1 = 0x0064fd3c 1598zippo[0][0] = 2 1599*zippo[0] = 2 1600**zippo = 2 1601zippo[2][1] = 3 1602*(*(zippo+2) + 1) = 3</code></pre> 1603<p>ä¸å¾æ¼ç¤ºäºæ°ç»å°åãæ°ç»å 容åæéä¹é´çå ³ç³»ã</p> 1604<p><img src="/img/cdetails/arrptr.jpg" style="zoom: 80%;" /></p> 1605<h4 id="彿°çå¤ç»´æ°ç»å½¢å">3.2.2 彿°çï¼å¤ç»´ï¼æ°ç»å½¢å</h4> 1606<p>å·²ç¥äºç»´æ°ç»æåä¸ç»´çé¿åº¦æ¶ï¼å¯ä»¥å°å ¶ä½ä¸ºåæ°ä¼ å ¥å½æ°ãå设æå¦ä¸æ°ç»å彿°è°ç¨ï¼</p> 1607<div class="sourceCode" id="cb48"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb48-1"><a href="#cb48-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> junk<span class="op">[</span><span class="dv">3</span><span class="op">][</span><span class="dv">4</span><span class="op">]</span> <span class="op">=</span> <span class="op">{</span> <span class="op">{</span><span class="dv">2</span><span class="op">,</span><span class="dv">4</span><span class="op">,</span><span class="dv">5</span><span class="op">,</span><span class="dv">8</span><span class="op">},</span> <span class="op">{</span><span class="dv">3</span><span class="op">,</span><span class="dv">5</span><span class="op">,</span><span class="dv">6</span><span class="op">,</span><span class="dv">9</span><span class="op">},</span> <span class="op">{</span><span class="dv">12</span><span class="op">,</span><span class="dv">10</span><span class="op">,</span><span class="dv">8</span><span class="op">,</span><span class="dv">6</span><span class="op">}</span> <span class="op">};</span></span> 1608<span id="cb48-2"><a href="#cb48-2" aria-hidden="true" tabindex="-1"></a>somfunction<span class="op">(</span>junk<span class="op">);</span></span></code></pre></div> 1609<p>éè¿åé¢ç讨论å¯ç¥ï¼<code>junk</code> æ¯ä¸ä¸ªæåæ°ç»ï¼å å« 4 个 1610<code>int</code> ç±»åå¼ï¼çæéãå¯ä»¥è¿æ ·å£°æå½æ°çå½¢åï¼</p> 1611<div class="sourceCode" id="cb49"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb49-1"><a href="#cb49-1" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> somefunction<span class="op">(</span> <span class="dt">int</span> <span class="op">(*</span>
1611 pt<span class="op">)[</span><span class="dv">4</span><span class="op">]</span> <span class="op">);</span></span></code></pre></div> 1612<p>å¦å¤ï¼å¦æå½ä¸ä» å½ <code>pt</code> 1613æ¯ä¸ä¸ªå½æ°çå½¢å¼åæ°æ¶ï¼å¯ä»¥è¿æ ·å£°æï¼</p> 1614<div class="sourceCode" id="cb50"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb50-1"><a href="#cb50-1" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> somefunction<span class="op">(</span> <span class="dt">int</span> pt<span class="op">[][</span><span class="dv">4</span><span class="op">]</span> <span class="op">);</span></span></code></pre></div> 1615<p>注æï¼<strong>第 1 个</strong>æ¹æ¬å·æ¯ç©ºçãç©ºçæ¹æ¬å·è¡¨æ 1616<code>pt</code> æ¯ä¸ä¸ªæéã</p> 1617<h4 id="c-飿 ¼å符串">3.2.3 C 飿 ¼å符串</h4> 1618<p>C 飿 ¼å符串æ¯ä»¥ç©ºåç¬¦ï¼ <code>'\0'</code> ï¼ç»å°¾ç <code>char</code> 1619ç±»åæ°ç»ï¼<strong>注æï¼</strong>å®ä¹åç¬¦ä¸²çæ¶åè¦ä¸ºæ«å°¾ç©ºå符é¢ç空é´ï¼ãå æ¤ï¼æ°ç»åæéçç¸å ³è¡ä¸ºå¨å符串è¯å¢ä¸æ¯ä¸åçã</p> 1620<p><strong>å符串åé¢å¸¸é</strong></p> 1621<div class="sourceCode" id="cb51"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb51-1"><a href="#cb51-1" aria-hidden="true" tabindex="-1"></a><span class="dt">char</span> <span class="op">*</span>sp <span class="op">=</span> <span class="st">"Hello"</span><span class="op">;</span></span></code></pre></div> 1622<ul> 1623<li><code>"Hello"</code> æ¯ä¸ä¸ªå符串åé¢å¸¸éï¼åå¨å¨åªè¯»å åæ®µã</li> 1624<li><code>sp</code> æ¯ä¸ä¸ªæå该å符串é¦å符ç <code>char*</code> 1625æéã</li> 1626<li><strong>ä¸è½éè¿ <code>sp</code> 1627ä¿®æ¹å符串å 容</strong>ï¼å°è¯ä¿®æ¹ä¼å¯¼è´æªå®ä¹è¡ä¸ºï¼é常ç¨åºå´©æºï¼ã</li> 1628</ul> 1629<p>示ä¾ç¨åºï¼</p> 1630<div class="sourceCode" id="cb52"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb52-1"><a href="#cb52-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 1631<span id="cb52-2"><a href="#cb52-2" aria-hidden="true" tabindex="-1"></a></span> 1632<span id="cb52-3"><a href="#cb52-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 1633<span id="cb52-4"><a href="#cb52-4" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1634<span id="cb52-5"><a href="#cb52-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span><span class="op">*</span> sp <span class="op">=</span> <span class="st">"Hello"</span><span class="op">;</span> <span class="co">// sp æååªè¯»å å</span></span> 1635<span id="cb52-6"><a href="#cb52-6" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%s\n</span><span class="st">"</span><span class="op">,</span> sp<span class="op">);</span></span> 1636<span id="cb52-7"><a href="#cb52-7" aria-hidden="true" tabindex="-1"></a></span> 1637<span id="cb52-8"><a href="#cb52-8" aria-hidden="true" tabindex="-1"></a> <span class="co">// sp[0] = 'h'; // 严éé误ï¼è¯å¾ä¿®æ¹åªè¯»å åï¼è¿è¡æ¶å¯è½å´©æºï¼</span></span> 1638<span id="cb52-9"><a href="#cb52-9" aria-hidden="true" tabindex="-1"></a></span> 1639<span id="cb52-10"><a href="#cb52-10" aria-hidden="true" tabindex="-1"></a> sp <span class="op">=</span> <span class="st">"World"</span><span class="op">;</span> <span class="co">// åæ³ï¼å¯ä»¥æ¹åæéæå</span></span> 1640<span id="cb52-11"><a href="#cb52-11" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%s\n</span><span class="st">"</span><span class="op">,</span> sp<span class="op">);</span></span> 1641<span id="cb52-12"><a href="#cb52-12" aria-hidden="true" tabindex="-1"></a></span> 1642<span id="cb52-13"><a href="#cb52-13" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 1643<span id="cb52-14"><a href="#cb52-14" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 1644<blockquote> 1645<p>ç¼è¯å¨é常ä¸ä¼é»æ¢ <code>char *sp = "..."</code> çåæ³ï¼ä½å»ºè®®åæ 1646<code>const char *sp = "..."</code>ï¼ä»¥è¡¨æè¯¥å符串ä¸å¯ä¿®æ¹ã</p> 1647</blockquote> 1648<p><strong>å符æ°ç»ï¼å¯ä¿®æ¹çå符串ï¼</strong></p> 1649<div class="sourceCode" id="cb53"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb53-1"><a href="#cb53-1" aria-hidden="true" tabindex="-1"></a><span class="dt">char</span> sa<span class="op">[]</span> <span class="op">=</span> <span class="st">"Hello"</span><span class="op">;</span></span></code></pre></div> 1650<ul> 1651<li>ç¼è¯å¨å¨æ ä¸ï¼æå ¨å±æ°æ®åºï¼åé è¶³å¤ç©ºé´ï¼å æ¬ç»å°¾ç 1652<code>'\0'</code>ï¼ï¼å¹¶å°å符串åé¢éçå 容å¤å¶è¿å»ã</li> 1653<li>æ°ç»å 容<strong>å¯ä»¥è¢«ä¿®æ¹</strong>ã</li> 1654<li>æ°ç»å <code>sa</code> 1655æ¯ä¸ä¸ª<strong>常éæé</strong>ï¼å°åä¸å¯åï¼ï¼ä½å 容å¯åã</li> 1656</ul> 1657<p>示ä¾ç¨åºï¼</p> 1658<div class="sourceCode" id="cb54"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb54-1"><a href="#cb54-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 1659<span id="cb54-2"><a href="#cb54-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><string.h></span></span> 1660<span id="cb54-3"><a href="#cb54-3" aria-hidden="true" tabindex="-1"></a></span> 1661<span id="cb54-4"><a href="#cb54-4" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 1662<span id="cb54-5"><a href="#cb54-5" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1663<span id="cb54-6"><a href="#cb54-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span> sa<span class="op">[]</span> <span class="op">=</span> <span class="st">"Hello"</span><span class="op">;</span> <span class="co">// 卿 ä¸å建å¯ä¿®æ¹å¯æ¬</span></span> 1664<span id="cb54-7"><a href="#cb54-7" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%s\n</span><span class="st">"</span><span class="op">,</span> sa<span class="op">);</span></span> 1665<span id="cb54-8"><a href="#cb54-8" aria-hidden="true" tabindex="-1"></a></span> 1666<span id="cb54-9"><a href="#cb54-9" aria-hidden="true" tabindex="-1"></a>
1666 sa<span class="op">[</span><span class="dv">0</span><span class="op">]</span> <span class="op">=</span> <span class="ch">'h'</span><span class="op">;</span> <span class="co">// åæ³ï¼ä¿®æ¹å 容</span></span> 1667<span id="cb54-10"><a href="#cb54-10" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%s\n</span><span class="st">"</span><span class="op">,</span> sa<span class="op">);</span> <span class="co">// è¾åº "hello"</span></span> 1668<span id="cb54-11"><a href="#cb54-11" aria-hidden="true" tabindex="-1"></a></span> 1669<span id="cb54-12"><a href="#cb54-12" aria-hidden="true" tabindex="-1"></a> <span class="co">// sa = "World"; // éè¯¯ï¼æ°ç»åæ¯å¸¸éï¼ä¸è½éæ°èµå¼</span></span> 1670<span id="cb54-13"><a href="#cb54-13" aria-hidden="true" tabindex="-1"></a></span> 1671<span id="cb54-14"><a href="#cb54-14" aria-hidden="true" tabindex="-1"></a> strcpy<span class="op">(</span>sa<span class="op">,</span> <span class="st">"World"</span><span class="op">);</span> <span class="co">// åæ³ï¼ç¡®ä¿ç©ºé´è¶³å¤ï¼</span></span> 1672<span id="cb54-15"><a href="#cb54-15" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%s\n</span><span class="st">"</span><span class="op">,</span> sa<span class="op">);</span></span> 1673<span id="cb54-16"><a href="#cb54-16" aria-hidden="true" tabindex="-1"></a></span> 1674<span id="cb54-17"><a href="#cb54-17" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 1675<span id="cb54-18"><a href="#cb54-18" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 1676<blockquote> 1677<p>注æï¼ <code>"Hello"</code> éè¦ 6 个åèï¼å« 1678<code>'\0'</code>ï¼ï¼å æ¤ä¸è½å为 <code>char sa[5]</code> èåºå为 1679<code>char sa[6]</code> æç´æ¥ç¨ <code>char sa[]</code> 1680让ç¼è¯å¨èªå¨è®¡ç®é¿åº¦ã</p> 1681</blockquote> 1682<p>æ°ç»å½¢å¼åæé形弿ä½ä¸åï¼ä»¥ä¸é¢ç声æä¸ºä¾ï¼æ°ç»å½¢å¼ï¼<code>sa[]</code>ï¼å¨è®¡ç®æºçå åä¸åé 为ä¸ä¸ªå å« 16836 个å ç´ çæ°ç»ï¼æ¯ä¸ªå ç´ å¯¹åºä¸ä¸ªå符ï¼è¿å ä¸ä¸ä¸ªæ«å°¾ç空å符 1684<code>'\0'</code>ï¼ï¼æ¯ä¸ªå ç´ è¢«åå§å为å符串åé¢é对åºçå符ãé常ï¼å符串é½ä½ä¸ºå¯æ§è¡æä»¶çä¸é¨åå¨å卿°æ®æ®µä¸ã彿ç¨åºè½½å ¥å åæ¶ï¼ä¹è½½å ¥äºç¨åºä¸çå符串ãå符串å¨åå¨éæåå¨åºï¼static 1685memoryï¼ä¸ã使¯ï¼ç¨åºå¨å¼å§è¿è¡æ¶æä¼ä¸ºè¯¥æ°ç»åé å åãæ¤æ¶ï¼æå°å符串æ·è´å°æ°ç»ä¸ã注æï¼æ¤æ¶å符串æä¸¤ä¸ªå¯æ¬ãä¸ä¸ªæ¯å¨éæå åä¸çå符串åé¢éï¼å¦ä¸ä¸ªæ¯å¨åå¨ 1686<code>sa</code> æ°ç»ä¸çå符串ã</p> 1687<p>æ¤åï¼ç¼è¯å¨ä¾¿ææ°ç»å <code>sa</code> 1688è¯å«ä¸ºè¯¥æ°ç»é¦å ç´ å°åï¼<code>&sa[0]</code>ï¼çå«åãè¿éå ³é®è¦çè§£ï¼å¨æ°ç»å½¢å¼ä¸ï¼<code>sa</code> 1689æ¯å°å常éãä¸è½æ´æ¹ <code>sa</code>ï¼å¦ææ¹åäº 1690<code>sa</code>ï¼åæå³çæ¹åäºæ°ç»çåå¨ä½ç½®ï¼å³å°åï¼ãå¯ä»¥è¿è¡ç±»ä¼¼ 1691<code>sa+1</code> è¿æ ·çæä½ï¼æ è¯æ°ç»çä¸ä¸ä¸ªå ç´ ã使¯ä¸å 许è¿è¡ 1692<code>++sa</code> 1693è¿æ ·çæä½ãéå¢è¿ç®ç¬¦åªè½ç¨äºåéååï¼ææ¦æ¬å°è¯´ï¼åªè½ç¨äºå¯ä¿®æ¹çå·¦å¼ï¼ï¼ä¸è½ç¨äºå¸¸éã</p> 1694<p>æéå½¢å¼ï¼<code>*sp</code>ï¼ä¹ä½¿å¾ç¼è¯å¨ä¸ºå符串å¨éæåå¨åºé¢ç 6 1695个å ç´ ç空é´ãå¦å¤ï¼ä¸æ¦å¼å§æ§è¡ç¨åºï¼å®ä¼ä¸ºæéåé <code>sp</code> 1696çåºä¸ä¸ªå¨åä½ç½®ï¼å¹¶æå符串çå°åå¨å卿éåéä¸ã该åéæåæå该å符串çé¦å符ï¼ä½æ¯å®çå¼å¯ä»¥æ¹åãå æ¤ï¼å¯ä»¥ä½¿ç¨éå¢è¿ç®ç¬¦ãä¾å¦ï¼<code>++sp</code> 1697å°æå第 2 个å符ï¼<code>'e'</code>ï¼ã</p> 1698<p>å符串åé¢é被è§ä¸º <code>const</code> æ°æ®ãç±äº <code>sp</code> 1699æåè¿ä¸ª <code>const</code> æ°æ®ï¼æä»¥åºè¯¥æ <code>sp</code> 声æä¸ºæå 1700<code>const</code> æ°æ®çæéãè¿æå³çä¸è½ç¨ <code>sp</code> 1701æ¹å宿æåçæ°æ®ï¼ä½æ¯ä»ç¶å¯ä»¥æ¹å <code>sp</code> 1702çå¼ï¼å³ï¼<code>sp</code> 1703æåçä½ç½®ï¼ã妿æä¸ä¸ªå符串åé¢éæ·è´ç»ä¸ä¸ªæ°ç»ï¼å°±å¯ä»¥éææ¹åæ°æ®ï¼é¤éææ°ç»å£°æä¸º 1704<code>const</code>ã</p> 1705<p>æ»ä¹ï¼åå§åæ°ç»æéæåå¨åºçå符串æ·è´å°æ°ç»ä¸ï¼èåå§åæéåªæå符串çå°åæ·è´ç»æéã</p> 1706<h3 id="ç»æä½æé">3.3 ç»æä½æé</h3> 1707<h4 id="å å对é½">3.3.1 å å对é½</h4> 1708<p><strong>åºæ¬å¯¹é½è§å</strong></p> 1709<ol type="1"> 1710<li>æ¯ä¸ªæåç<strong>èµ·å§å°å</strong>å¿ é¡»æ¯å ¶èªèº«å¤§å°ï¼æå ¶å¯¹é½è¦æ±ï¼çæ´æ°åã</li> 1711<li>ç»æä½æ»å¤§å°å¿ é¡»æ¯ç»æä½ä¸<strong>æå¤§å¯¹é½è¦æ±</strong>çæ´æ°åï¼å³å¯¹é½å°æå¤§æåç对é½è¾¹çï¼ã</li> 1712<li>ç¼è¯å¨å¯è½ä¼å¨æåä¹é´æå ¥<strong>å¡«å åè</strong>ï¼paddingï¼ï¼ä»¥æ»¡è¶³å¯¹é½è¦æ±ã</li> 1713</ol> 1714<p><strong>ç¤ºä¾ 1ï¼</strong></p> 1715<div class="sourceCode" id="cb55"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb55-1"><a href="#cb55-1" aria-hidden="true" tabindex="-1"></a><span class="kw">
1715struct</span> S1 <span class="op">{</span></span> 1716<span id="cb55-2"><a href="#cb55-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span> a<span class="op">;</span> <span class="co">// 1 åè</span></span> 1717<span id="cb55-3"><a href="#cb55-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">short</span> b<span class="op">;</span> <span class="co">// 2 åè</span></span> 1718<span id="cb55-4"><a href="#cb55-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">double</span> c<span class="op">;</span> <span class="co">// 8 åè</span></span> 1719<span id="cb55-5"><a href="#cb55-5" aria-hidden="true" tabindex="-1"></a><span class="op">};</span></span></code></pre></div> 1720<p>å åå¸å±åæï¼</p> 1721<ul> 1722<li>åç§» 0ï¼<code>a</code>ï¼1 åèï¼</li> 1723<li><code>b</code> éè¦ 2 åèå¯¹é½ â ä¸ä¸ä¸ª 2 çåæ°æ¯ 2 â å¨åç§» 17242ï¼éå¨ <code>a</code> åå¡«å 1 åèï¼ 1725<ul> 1726<li>åç§» 1ï¼å¡«å 1 åè</li> 1727<li>åç§» 2~3ï¼<code>b</code></li> 1728</ul></li> 1729<li><code>c</code> éè¦ 8 åèå¯¹é½ â ä¸ä¸ä¸ª 8 çåæ°æ¯ 8 1730<ul> 1731<li>åç§» 4~7ï¼å¡«å 4 åè</li> 1732<li>åç§» 8~15ï¼<code>c</code></li> 1733</ul></li> 1734</ul> 1735<p>æ»å¤§å°ï¼</p> 1736<ul> 1737<li>æ°æ® + å¡«å = 1 + 1ï¼padï¼+ 2 + 4ï¼padï¼+ 8 = 16 åè</li> 1738<li>æå¤§å¯¹é½è¦æ± = 8ï¼æ¥èª <code>double</code>ï¼ï¼16 æ¯ 8 çåæ° â 1739åæ³</li> 1740</ul> 1741<p><code>sizeof(struct S1) = 16</code></p> 1742<p><strong>ç¤ºä¾ 2ï¼</strong></p> 1743<div class="sourceCode" id="cb56"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb56-1"><a href="#cb56-1" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> S2 <span class="op">{</span></span> 1744<span id="cb56-2"><a href="#cb56-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span> a<span class="op">;</span> <span class="co">// 1 åè</span></span> 1745<span id="cb56-3"><a href="#cb56-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">double</span> b<span class="op">;</span> <span class="co">// 8 åè</span></span> 1746<span id="cb56-4"><a href="#cb56-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">short</span> c<span class="op">;</span> <span class="co">// 2 åè</span></span> 1747<span id="cb56-5"><a href="#cb56-5" aria-hidden="true" tabindex="-1"></a><span class="op">};</span></span></code></pre></div> 1748<p>å åå¸å±åæï¼</p> 1749<ul> 1750<li>åç§» 0ï¼<code>a</code>ï¼1 åèï¼</li> 1751<li><code>b</code> éè¦ 8 åèå¯¹é½ â ä¸ä¸ä¸ª 8 çåæ°æ¯ 8 1752<ul> 1753<li>åç§» 1~7ï¼å¡«å 7 åè</li> 1754<li>åç§» 8~15ï¼<code>b</code></li> 1755</ul></li> 1756<li><code>c</code> éè¦ 2 åèå¯¹é½ â åç§» 16 æ¯ 2 çåæ° â æ¾å¨ 175716~17</li> 1758<li>å½åæ»å¤§å° = 18 åè</li> 1759<li>ä½ç»æä½æ»å¤§å°å¿ é¡»æ¯ æå¤§å¯¹é½è¦æ±ï¼8ï¼çæ´æ°å 1760<ul> 1761<li>18 䏿¯ 8 çåæ° â è¡¥å° 24</li> 1762</ul></li> 1763</ul> 1764<p>æ»å¤§å°ï¼</p> 1765<ul> 1766<li>1ï¼aï¼+ 7ï¼padï¼+ 8ï¼bï¼+ 2ï¼cï¼+ 6ï¼å°¾é¨ padï¼ = 24 åè</li> 1767</ul> 1768<p><code>sizeof(struct S2) = 24</code></p> 1769<h4 id="ç¨æéè®¿é®æå">3.3.2 ç¨æéè®¿é®æå</h4> 1770<div class="sourceCode" id="cb57"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb57-1"><a href="#cb57-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define LEN </span><span class="dv">20</span></span> 1771<span id="cb57-2"><a href="#cb57-2" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> guy <span class="op">{</span></span> 1772<span id="cb57-3"><a href="#cb57-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span> favfood<span class="op">[</span>LEN<span class="op">];</span></span> 1773<span id="cb57-4"><a href="#cb57-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">char</span> job<span class="op">[</span>LEN<span class="op">];</span></span> 1774<span id="cb57-5"><a href="#cb57-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">float</span> income<span class="op">;</span></span> 1775<span id="cb57-6"><a href="#cb57-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span> fellow<span class="op">;</span></span></code></pre></div> 1776<p>å设æé <code>him</code> æåç»æåé <code>fellow</code>ï¼å¦ä½éè¿ 1777<code>him</code> è·å¾ <code>fellow</code> çæåçå¼ï¼</p> 1778<p>æå¸¸ç¨çæ¹æ³ï¼ä½¿ç¨ <code>-></code> è¿ç®ç¬¦ã妿 1779<code>him == &fellow</code>ï¼é£ä¹ <code>him->income</code> 峿¯ 1780<code>fellow.income</code>ãæ¢å¥è¯è¯´ï¼<code>-></code> 1781è¿ç®ç¬¦åé¢çç»ææéå <code>.</code> 1782è¿ç®ç¬¦åé¢çç»æå工使¹å¼ç¸åï¼ä¸è½åæ <code>him.incone</code>ï¼å 为 1783<code>him</code> 䏿¯ç»æåï¼ã</p> 1784<p>å¦ä¸ç§æ¹æ³æ¯ï¼ä»¥è¿æ ·çé¡ºåºæå®ç»ææåçå¼ï¼å¦æ 1785<code>him == &fellow</code>ï¼é£ä¹ <code>*him == fellow</code>ï¼å 为 1786<code>&</code> å <code>*</code>
1787æ¯ä¸å¯¹äºéè¿ç®ç¬¦ãå æ¤ï¼å¯ä»¥å以䏿¿ä»£ï¼</p> 1788<div class="sourceCode" id="cb58"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb58-1"><a href="#cb58-1" aria-hidden="true" tabindex="-1"></a>fellow<span class="op">.</span>income <span class="op">==</span> <span class="op">(*</span>him<span class="op">).</span>income</span></code></pre></div> 1789<p>å¿ é¡»è¦ä½¿ç¨åæ¬å·ï¼å 为 <code>.</code> è¿ç®ç¬¦æ¯ <code>*</code> 1790è¿ç®ç¬¦çä¼å 级é«ã</p> 1791<p>æ»ä¹ï¼å¦æ <code>him</code> æ¯æå <code>guy</code> ç±»åç»æ 1792<code>fellow</code> çæéï¼ä¸é¢çå ³ç³»ææç«ï¼</p> 1793<div class="sourceCode" id="cb59"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb59-1"><a href="#cb59-1" aria-hidden="true" tabindex="-1"></a>fellow<span class="op">.</span>income <span class="op">==</span> <span class="op">(*</span>him<span class="op">).</span>income <span class="op">==</span> him<span class="op">-></span>income <span class="co">// å设 him == &fellow</span></span></code></pre></div> 1794<h3 id="彿°æé">3.4 彿°æé</h3> 1795<h4 id="å®ä¹å使ç¨">3.4.1 å®ä¹å使ç¨</h4> 1796<p>彿°æéæ¯æå彿°çæéåéãå¨ C 1797è¯è¨ä¸ï¼å½æ°åæ¬èº«å°±æ¯ä¸ä¸ªæåè¯¥å½æ°çæéï¼å æ¤å¯ä»¥å°å½æ°å°åèµç»å½æ°æéåéï¼å¹¶éè¿è¯¥æéè°ç¨å½æ°ã</p> 1798<p>彿°æéçè¯æ³å¦ä¸ï¼</p> 1799<div class="sourceCode" id="cb60"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb60-1"><a href="#cb60-1" aria-hidden="true" tabindex="-1"></a>è¿åç±»å <span class="op">(*</span>æéå<span class="op">)(</span>åæ°ç±»åå表<span class="op">);</span></span></code></pre></div> 1800<p>ä¾å¦ï¼å®ä¹ä¸ä¸ªæåæ¥å两个 <code>int</code> åæ°å¹¶è¿å 1801<code>int</code> ç彿°çæéï¼</p> 1802<div class="sourceCode" id="cb61"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb61-1"><a href="#cb61-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="op">(*</span>func_ptr<span class="op">)(</span><span class="dt">int</span><span class="op">,</span> <span class="dt">int</span><span class="op">);</span></span></code></pre></div> 1803<blockquote> 1804<p>注æï¼<code>*func_ptr</code> å¿ é¡»ç¨æ¬å·æ¬èµ·æ¥ï¼å¦åä¼è¢«è§£é为è¿å 1805<code>int*</code> ç彿°å£°æã</p> 1806</blockquote> 1807<p>示ä¾ï¼å®ä¹å½æ°å¹¶ç¨å½æ°æéè°ç¨</p> 1808<div class="sourceCode" id="cb62"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb62-1"><a href="#cb62-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 1809<span id="cb62-2"><a href="#cb62-2" aria-hidden="true" tabindex="-1"></a></span> 1810<span id="cb62-3"><a href="#cb62-3" aria-hidden="true" tabindex="-1"></a><span class="co">// å®ä¹ä¸¤ä¸ªæ®é彿°</span></span> 1811<span id="cb62-4"><a href="#cb62-4" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> add<span class="op">(</span><span class="dt">int</span> a<span class="op">,</span> <span class="dt">int</span> b<span class="op">)</span> <span class="op">{</span> <span class="cf">return</span> a <span class="op">+</span> b<span class="op">;</span> <span class="op">}</span></span> 1812<span id="cb62-5"><a href="#cb62-5" aria-hidden="true" tabindex="-1"></a></span> 1813<span id="cb62-6"><a href="#cb62-6" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> subtract<span class="op">(</span><span class="dt">int</span> a<span class="op">,</span> <span class="dt">int</span> b<span class="op">)</span> <span class="op">{</span> <span class="cf">return</span> a <span class="op">-</span> b<span class="op">;</span> <span class="op">}</span></span> 1814<span id="cb62-7"><a href="#cb62-7" aria-hidden="true" tabindex="-1"></a></span> 1815<span id="cb62-8"><a href="#cb62-8" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 1816<span id="cb62-9"><a href="#cb62-9" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1817<span id="cb62-10"><a href="#cb62-10" aria-hidden="true" tabindex="-1"></a> <span class="co">// 声æå½æ°æé</span></span> 1818<span id="cb62-11"><a href="#cb62-11" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> <span class="op">(*</span>operation<span class="op">)(</span><span class="dt">int</span><span class="op">,</span> <span class="dt">int</span><span class="op">);</span></span> 1819<span id="cb62-12"><a href="#cb62-12" aria-hidden="true" tabindex="-1"></a></span> 1820<span id="cb62-13"><a href="#cb62-13" aria-hidden="true" tabindex="-1"></a> <span class="co">// å°å½æ°å°åèµç»æéï¼å½æ°åå³å°åï¼</span></span> 1821<span id="cb62-14"><a href="#cb62-14" aria-hidden="true" tabindex="-1"></a> operation <span class="op">=</span> add<span class="op">;</span></span> 1822<span id="cb62-15"><a href="#cb62-15" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"5 + 3 = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> operation<span class="op">(</span><span class="dv">5</span><span class="op">,</span> <span class="dv">3</span><span class="op">));</span> <span class="co">// è¾åº: 8</span></span> 1823<span id="cb62-16"><a href="#cb62-16" aria-hidden="true" tabindex="-1"></a></span> 1824<span id="cb62-17"><a href="#cb62-17" aria-hidden="true" tabindex="-1"></a> operation <span class="op">=</span> subtract<span class="op">;</span></span> 1825<span id="cb62-18"><a href="#cb62-18" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"5 - 3 = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> operation<span class="op">(</span><span class="dv">5</span><span class="op">,</span> <span class="dv">3</span><span class="op">));</span> <span class="co">// è¾åº: 2</span></span> 1826<span id="cb62-19"><a href="#cb62-19" aria-hidden="true" tabindex="-1"></a></span> 1827<span id="cb62-20"><a href="#cb62-20" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 1828<span id="cb62-21"><a href="#cb62-21" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 1829<p>彿°æé常ç¨äºå®ç°<strong>åè°æºå¶</strong>ï¼ä¾å¦ï¼</p> 1830<div class="sourceCode" id="cb63"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb63-1"><a href="#cb63-1" aria-hidden="true" tabindex="-1"></a><span class="co">// æ¥åä¸ä¸ªå½æ°æéä½ä¸ºåæ°</span></span> 1831<span id="cb63-2"><a href="#cb63-2" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span>
1831 calculate<span class="op">(</span><span class="dt">int</span> x<span class="op">,</span> <span class="dt">int</span> y<span class="op">,</span> <span class="dt">int</span> <span class="op">(*</span>op<span class="op">)(</span><span class="dt">int</span><span class="op">,</span> <span class="dt">int</span><span class="op">))</span></span> 1832<span id="cb63-3"><a href="#cb63-3" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1833<span id="cb63-4"><a href="#cb63-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> result <span class="op">=</span> op<span class="op">(</span>x<span class="op">,</span> y<span class="op">);</span></span> 1834<span id="cb63-5"><a href="#cb63-5" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"Result: </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> result<span class="op">);</span></span> 1835<span id="cb63-6"><a href="#cb63-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span> 1836<span id="cb63-7"><a href="#cb63-7" aria-hidden="true" tabindex="-1"></a></span> 1837<span id="cb63-8"><a href="#cb63-8" aria-hidden="true" tabindex="-1"></a><span class="co">// 使ç¨</span></span> 1838<span id="cb63-9"><a href="#cb63-9" aria-hidden="true" tabindex="-1"></a>
1838calculate<span class="op">(</span><span class="dv">10</span><span class="op">,</span> <span class="dv">4</span><span class="op">,</span> add<span class="op">);</span> <span class="co">// è¾åº: Result: 14</span></span> 1839<span id="cb63-10"><a href="#cb63-10" aria-hidden="true" tabindex="-1"></a>calculate<span class="op">(</span><span class="dv">10</span><span class="op">,</span> <span class="dv">4</span><span class="op">,</span> subtract<span class="op">);</span> <span class="co">// è¾åº: Result: 6</span></span></code></pre></div> 1840<p>以ä¸ä¸¤ç§éè¿å½æ°æéè°ç¨å½æ°çæ¹å¼æ¯çä»·çï¼</p> 1841<div class="sourceCode" id="cb64"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb64-1"><a href="#cb64-1" aria-hidden="true" tabindex="-1"></a>operation <span class="op">=</span> subtract<span class="op">;</span></span> 1842<span id="cb64-2"><a href="#cb64-2" aria-hidden="true" tabindex="-1"></a></span> 1843<span id="cb64-3"><a href="#cb64-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> res1 <span class="op">=</span> operation<span class="op">(</span><span class="dv">5</span><span class="op">,</span> <span class="dv">3</span><span class="op">);</span> <span class="co">// res1 = 2</span></span> 1844<span id="cb64-4"><a href="#cb64-4" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> res2 <span class="op">=</span> <span class="op">(*</span>operation<span class="op">)(</span><span class="dv">5</span><span class="op">,</span> <span class="dv">3</span><span class="op">);</span> <span class="co">// res2 = 2</span></span></code></pre></div> 1845<p>è¿ä¸¤ç§æ¹æ³çä¸å»é½åæ åçãå åæç¬¬ 1 ç§æ¹æ³ï¼ç±äº 1846<code>operation</code> æå <code>subtract</code> 彿°ï¼é£ä¹ 1847<code>*operation</code> å°±ç¸å½äº<code>subtract</code> 彿°ï¼æä»¥è¡¨è¾¾å¼ 1848<code>(*operation)(5, 3)</code> å <code>subtract(5, 3)</code> ç¸åãä» 1849<code>subtract</code> 彿°å <code>operation</code> 1850ç声æå°±è½çåºï¼<code>subtract</code> å <code>(*operation)</code> 1851æ¯çä»·çã第 2 1852ç§æ¹æ³ï¼ç±äºå½æ°åæ¯æéï¼é£ä¹æéå彿°åå¯ä»¥äºæ¢ä½¿ç¨ï¼æä»¥ 1853<code>operation(5, 3)</code> å <code>subtract(5, 3)</code> ç¸åãä» 1854<code>operation</code> çèµå¼è¡¨è¾¾å¼è¯å¥å°±è½çåº <code>subtract</code> å 1855<code>operation</code> æ¯çä»·çã</p> 1856<h4 id="彿°å¼ç¼ç¨é£æ ¼">3.4.2 彿°å¼ç¼ç¨é£æ ¼</h4> 1857<blockquote> 1858<p>注æï¼ç±äº C è¯è¨å¹¶æ²¡ææä¾å¾å¥½ç彿°å¼æ½è±¡åè½ï¼å æ¤å¤§å¤æ°æ¶åå®ç¨ C 1859è¯è¨è¿è¡å½æ°å¼ç¼ç¨å¹¶ä¸æ¯ä¸ä¸ªå¾å¥½ç注æã</p> 1860</blockquote> 1861<p>彿°å¼ç¼ç¨æ¯ä¸ä¸ªå¾å®å¤§çè¯é¢ï¼è¿éç»åºä¸ä¸ªä¾åä¾è¯»è ä½ä¼å½æ°æéå¨ C 1862è¯è¨å½æ°å¼ç¼ç¨ä¸çä½ç¨ã</p> 1863<div class="sourceCode" id="cb65"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb65-1"><a href="#cb65-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 1864<span id="cb65-2"><a href="#cb65-2" aria-hidden="true" tabindex="-1"></a></span> 1865<span id="cb65-3"><a href="#cb65-3" aria-hidden="true" tabindex="-1"></a><span class="co">// Function signature for our operations</span></span> 1866<span id="cb65-4"><a href="#cb65-4" aria-hidden="true" tabindex="-1"></a><span class="kw">typedef</span> <span class="dt">int</span> <span class="op">(*</span>Func<span class="op">)(</span><span class="dt">int</span><span class="op">);</span></span> 1867<span id="cb65-5"><a href="#cb65-5" aria-hidden="true" tabindex="-1"></a></span> 1868<span id="cb65-6"><a href="#cb65-6" aria-hidden="true" tabindex="-1"></a><span class="co">// Structure to represent a closure-like object</span></span> 1869<span id="cb65-7"><a href="#cb65-7" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> repeat_apply<span class="op">(</span>Func f<span class="op">,</span> <span class="dt">int</span> n<span class="op">,</span> <span class="dt">int</span> x<span class="op">)</span></span> 1870<span id="cb65-8"><a href="#cb65-8" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1871<span id="cb65-9"><a href="#cb65-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>n <span class="op">==</span> <span class="dv">1</span><span class="op">)</span> <span class="op">{</span></span> 1872<span id="cb65-10"><a href="#cb65-10" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> f<span class="op">(</span>
1872x<span class="op">);</span></span> 1873<span id="cb65-11"><a href="#cb65-11" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span> 1874<span id="cb65-12"><a href="#cb65-12" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> f<span class="op">(</span>repeat_apply<span class="op">(</span>f<span class="op">,</span> n <span class="op">-</span> <span class="dv">1</span><span class="op">,</span> x<span class="op">));</span></span> 1875<span id="cb65-13"><a href="#cb65-13" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span> 1876<span id="cb65-14"><a href="#cb65-14" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span> 1877<span id="cb65-15"><a href="#cb65-15" aria-hidden="true" tabindex="-1"></a></span> 1878<span id="cb65-16"><a href="#cb65-16" aria-hidden="true" tabindex="-1"></a><span class="co">// The functions to be repeated</span></span> 1879<span id="cb65-17"><a href="#cb65-17" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> add<span class="op">(</span><span class="dt">int</span> x<span class="op">)</span> <span class="op">{</span> <span class="cf">return</span> x <span class="op">+</span> <span class="dv">1</span><span class="op">;</span> <span class="op">}</span></span> 1880<span id="cb65-18"><a href="#cb65-18" aria-hidden="true" tabindex="-1"></a></span> 1881<span id="cb65-19"><a href="#cb65-19" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> square<span class="op">(</span><span class="dt">int</span> x<span class="op">)</span> <span class="op">{</span> <span class="cf">return</span> x <span class="op">*</span> x<span class="op">;</span> <span class="op">}</span></span> 1882<span id="cb65-20"><a href="#cb65-20" aria-hidden="true" tabindex="-1"></a></span> 1883<span id="cb65-21"><a href="#cb65-21" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 1884<span id="cb65-22"><a href="#cb65-22" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 1885<span id="cb65-23"><a href="#cb65-23" aria-hidden="true" tabindex="-1"></a> <span class="co">// Test cases</span></span> 1886<span id="cb65-24"><a href="#cb65-24" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> repeat_apply<span class="op">(</span>add<span class="op">,</span> <span class="dv">5</span><span class="op">,</span> <span class="dv">1</span><span class="op">));</span> <span class="co">// Should output 6</span></span> 1887<span id="cb65-25"><a href="#cb65-25" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> repeat_apply<span class="op">(</span>square<span class="op">,</span> <span class="dv">3</span><span class="op">,</span> <span class="dv">2</span><span class="op">));</span> <span class="co">// Should output 256</span></span> 1888<span id="cb65-26"><a href="#cb65-26" aria-hidden="true" tabindex="-1"></a></span> 1889<span id="cb65-27"><a href="#cb65-27" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 1890<span id="cb65-28"><a href="#cb65-28" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 1891<p><code>repeat_apply</code> çåè½æ¯æä¼ å ¥ç彿° <code>F</code> å¨ 1892<code>x</code> ä¸åºç¨ <code>n</code> 次ãå®å¹¶ä¸å ³å¿ <code>F</code> 1893å ·ä½æ¯ä»ä¹å½æ°ï¼èä» ä» å ³æ³¨âéå¤ <code>n</code> 1894次âè¿ä¸ç®æ ãè¿ä½ç°äºå½æ°å¼ç¼ç¨çä¸ä¸ªç¹ç¹ï¼<strong>å ³æ³¨åä»ä¹è䏿¯æä¹å</strong>ã</p> 1895<h2 id="å®ç¨æ ååºå½æ°">4 å®ç¨æ ååºå½æ°</h2> 1896<h3 id="å符ç¸å ³">4.1 å符ç¸å ³</h3> 1897<p>æ¬èæä»ç»ç彿°åå®ä¹å¨ <code>ctype.h</code> 头æä»¶ä¸ã</p> 1898<h4 id="æ£æ¥å符类å«">4.1.1 æ£æ¥å符类å«</h4> 1899<table> 1900<colgroup> 1901<col style="width: 9%" /> 1902<col style="width: 52%" /> 1903<col style="width: 38%" /> 1904</colgroup> 1905<thead> 1906<tr> 1907<th>彿°å</th> 1908<th>åè½è¯´æ</th> 1909<th>è¿åå¼ï¼çæ¡ä»¶ï¼</th> 1910</tr> 1911</thead> 1912<tbody> 1913<tr> 1914<td><code>isalnum</code></td> 1915<td>夿å符æ¯å¦ä¸ºåæ¯ææ°å</td> 1916<td>å符æ¯åæ¯ï¼aâz, AâZï¼ææ°åï¼0â9ï¼</td> 1917</tr> 1918<tr> 1919<td><code>isalpha</code></td> 1920<td>夿å符æ¯å¦ä¸ºåæ¯</td> 1921<td>å符æ¯åæ¯ï¼aâz, AâZï¼</td> 1922</tr> 1923<tr> 1924<td><code>islower</code></td> 1925<td>夿å符æ¯å¦ä¸ºå°å忝</td> 1926<td>å符æ¯å°å忝ï¼aâzï¼</td> 1927</tr> 1928<tr> 1929<td><code>isupper</code></td> 1930<td>夿å符æ¯å¦ä¸ºå¤§å忝</td> 1931<td>å符æ¯å¤§å忝ï¼AâZï¼</td> 1932</tr> 1933<tr> 1934<td><code>isdigit</code></td> 1935<td>夿å符æ¯å¦ä¸ºåè¿å¶æ°å</td> 1936<td>åç¬¦æ¯æ°åï¼0â9ï¼</td> 1937</tr> 1938<tr> 1939<td><code>isspace</code></td> 1940<td>夿å符æ¯å¦ä¸ºç©ºç½å符</td> 1941<td>å符æ¯ç©ºæ ¼ãå¶è¡¨ç¬¦ãæ¢è¡ç空ç½ç¬¦</td> 1942</tr> 1943<tr> 1944<td><code>ispunct</code></td> 1945<td>夿å符æ¯å¦ä¸ºæ ç¹ç¬¦å·ï¼é忝ãéæ°åãé空ç½ï¼</td> 1946<td>åç¬¦æ¯æ ç¹ç¬¦å·ï¼å¦ !, ?, ., ; çï¼</td> 1947</tr> 1948</tbody> 1949</table> 1950<blockquote> 1951<p>ææè¿äºå½æ°é½æ¥å <code>int</code> ç±»ååæ°ï¼éå¸¸ä¼ å ¥ 1952<code>unsigned char</code> ç±»åçå符ï¼ï¼å¹¶è¿åéé¶å¼ï¼çï¼æ 19530ï¼åï¼ã</p> 1954</blockquote> 1955<h4 id="大å°å转æ¢">4.1.2 大å°å转æ¢</h4> 1956<table> 1957<colgroup> 1958<col style="width: 9%" /> 1959<col style="width: 31%" /> 1960<col style="width: 59%" /> 1961</colgroup> 1962<thead> 1963<tr> 1964<th>彿°å</th> 1965<th>åè½è¯´æ</th> 1966<th>è¿åå¼</th> 1967</tr> 1968</thead> 1969<tbody> 1970<tr> 1971<td><code>tolower</code></td> 1972<td>å°å¤§ååæ¯è½¬æ¢ä¸ºå¯¹åºçå°å忝</td> 1973<td>è¥åæ°æ¯å¤§å忝ï¼AâZï¼ï¼è¿å对åºå°å忝ï¼å¦åè¿ååå符</td> 1974</tr> 1975<tr> 1976<td><code>toupper</code></td> 1977<td>å°å°ååæ¯è½¬æ¢ä¸ºå¯¹åºç大å忝</td> 1978<td>è¥åæ°æ¯å°å忝ï¼aâzï¼ï¼è¿å对åºå¤§å忝ï¼å¦åè¿ååå符</td> 1979</tr> 1980</tbody> 1981</table> 1982<blockquote> 1983<ul> 1984<li>ä¸¤ä¸ªå½æ°åæ¥å <code>int</code> ç±»ååæ°ï¼é常为 1985<code>unsigned char</code> èå´å çå符ï¼ã<br /> 1986</li> 1987<li>å¦æä¼ å ¥çåç¬¦ä¸æ¯å¯è½¬æ¢ç忝ï¼å½æ°ç´æ¥è¿å该å符ä¸åã</li> 1988</ul> 1989</blockquote> 1990<h3 id="å符串ç¸å ³">4.2 å符串ç¸å ³</h3> 1991<h4 id="å符串æä½">4.2.1 å符串æä½</h4> 1992<p>æ¬èæä»ç»ç彿°åå®ä¹å¨ <code>string.h</code> 头æä»¶ä¸ã</p> 1993<table> 1994<colgroup> 1995<col style="width: 3%" /> 1996<col style="width: 23%" /> 1997<col style="width: 24%" /> 1998<col style="width: 24%" /> 1999<col style="width: 24%" /> 2000</colgroup> 2001<thead> 2002<tr> 2003<th>彿°å</th> 2004<th>åå</th> 2005<th>åè½</th> 2006<th>åæ°</th> 2007<th>è¿åå¼</th> 2008</tr> 2009</thead> 2010<tbody> 2011<tr> 2012<td><code>strcpy</code></td> 2013<td><code>char *strcpy(char *dest, const char *src);</code></td> 2014<td>å°å符串 <code>src</code> å¤å¶å° <code>dest</code>ï¼å æ¬ç»å°¾ç空å符 2015<code>'\0'</code></td> 2016<td><code>dest</code>ï¼ç®æ å符æ°ç»ï¼å¿ 须足å¤å¤§ä»¥å®¹çº³ 2017<code>src</code>ï¼<br><code>src</code>ï¼æºå符串ï¼ä»¥ <code>'\0'</code>
2018ç»å°¾ï¼</td> 2019<td>è¿å <code>dest</code> çæé</td> 2020</tr> 2021<tr> 2022<td><code>strcat</code></td> 2023<td><code>char *strcat(char *dest, const char *src);</code></td> 2024<td>å°å符串 <code>src</code> 追å å° <code>dest</code> æ«å°¾ï¼è¦ç 2025<code>dest</code> åæç»å°¾ç <code>'\0'</code>ï¼</td> 2026<td><code>dest</code>ï¼ç®æ å符串ï¼å¿ é¡»æè¶³å¤ç©ºé´å®¹çº³è¿½å åçç»æï¼<br><code>src</code>ï¼è¦è¿½å çæºå符串</td> 2027<td>è¿å <code>dest</code> çæé</td> 2028</tr> 2029<tr> 2030<td><code>strlen</code></td> 2031<td><code>size_t strlen(const char *s);</code></td> 2032<td>计ç®å符串 <code>s</code> çé¿åº¦ï¼ä¸å æ¬ç»å°¾ç空å符 2033<code>'\0'</code>ï¼</td> 2034<td><code>s</code>ï¼è¦è®¡ç®é¿åº¦çå符串</td> 2035<td>è¿åå符串ä¸å符ç个æ°ï¼ç±»å为 <code>size_t</code>ï¼</td> 2036</tr> 2037<tr> 2038<td><code>strcmp</code></td> 2039<td><code>int strcmp(const char *s1, const char *s2);</code></td> 2040<td>æåå ¸é¡ºåºæ¯è¾ä¸¤ä¸ªå符串 <code>s1</code> å <code>s2</code></td> 2041<td><code>s1</code>, <code>s2</code>ï¼è¦æ¯è¾ç两个å符串</td> 2042<td>è¥ <code>s1 < s2</code>ï¼è¿åè´æ´æ°ï¼<br>è¥ 2043<code>s1 == s2</code>ï¼è¿å 0ï¼<br>è¥ 2044<code>s1 > s2</code>ï¼è¿åæ£æ´æ°</td> 2045</tr> 2046<tr> 2047<td><code>strchr</code></td> 2048<td><code>char *strchr(const char *s, int c);</code></td> 2049<td>å¨å符串 <code>s</code> 䏿¥æ¾å符 <code>c</code> 2050ç¬¬ä¸æ¬¡åºç°çä½ç½®</td> 2051<td><code>s</code>ï¼è¦æç´¢çå符串<br><code>c</code>ï¼è¦æ¥æ¾çå符ï¼ä»¥ 2052<code>int</code> ä¼ å ¥ï¼ä½å®é è§ä¸º <code>unsigned char</code>ï¼</td> 2053<td>è¥æ¾å°ï¼è¿åæå该å符çæéï¼<br>è¥æªæ¾å°ï¼è¿å 2054<code>NULL</code></td> 2055</tr> 2056<tr> 2057<td><code>strstr</code></td> 2058<td><code>char *strstr(const char *haystack, const char *needle);</code></td> 2059<td>å¨å符串 <code>haystack</code> 䏿¥æ¾å串 <code>needle</code> 2060ç¬¬ä¸æ¬¡åºç°çä½ç½®</td> 2061<td><code>haystack</code>ï¼è¢«æç´¢ç主å符串<br><code>needle</code>ï¼è¦æ¥æ¾çå串ï¼è¥ä¸ºç©ºå符串ï¼è¿å 2062<code>haystack</code> èµ·å§ä½ç½®ï¼</td> 2063<td>è¥æ¾å°å串ï¼è¿åå串å¨ä¸»ä¸²ä¸çèµ·å§å°åï¼<br>è¥æªæ¾å°ï¼è¿å 2064<code>NULL</code></td> 2065</tr> 2066</tbody> 2067</table> 2068<blockquote> 2069<ul> 2070<li>ä½¿ç¨ <code>strcpy</code> å <code>strcat</code> 2071æ¶å¡å¿ ç¡®ä¿ç®æ ç¼å²åºè¶³å¤å¤§ï¼å¦åå¯è½å¯¼è´ç¼å²åºæº¢åºã</li> 2072<li><code>strchr</code> å <code>strstr</code> 2073è¿åçæ¯åå符串ä¸çå°åï¼ä¸å¯ç¨äºä¿®æ¹å符串ï¼é¤éåå符串æ¬èº«å¯ä¿®æ¹ï¼ã</li> 2074</ul> 2075</blockquote> 2076<h4 id="å符串转æ°å¼">4.2.2 å符串转æ°å¼</h4> 2077<p>æ¬èæä»ç»ç彿°åå®ä¹å¨ <code>stdlib.h</code> 头æä»¶ä¸ã</p> 2078<table> 2079<colgroup> 2080<col style="width: 3%" /> 2081<col style="width: 24%" /> 2082<col style="width: 24%" /> 2083<col style="width: 24%" /> 2084<col style="width: 24%" /> 2085</colgroup> 2086<thead> 2087<tr> 2088<th>彿°å</th> 2089<th>åå</th> 2090<th>åè½</th> 2091<th>åæ°</th> 2092<th>è¿åå¼</th> 2093</tr> 2094</thead> 2095<tbody> 2096<tr> 2097<td><code>atoi</code></td> 2098<td><code>int atoi(const char *nptr);</code></td> 2099<td>å°å符串 <code>nptr</code> 转æ¢ä¸º <code>int</code> ç±»åæ´æ°</td> 2100<td><code>nptr</code>ï¼æåè¦è½¬æ¢çå符串ï¼è·³è¿å¼å¤´ç©ºç½ï¼æåè¿å¶è§£æï¼</td> 2101<td>æåæ¶è¿å对åºç <code>int</code> å¼ï¼<br>è¥æ æ³è½¬æ¢ï¼è¿å 2102<code>0</code>ï¼æ é误æç¤ºï¼</td> 2103</tr> 2104<tr> 2105<td><code>atof</code></td> 2106<td><code>double atof(const char *nptr);</code></td> 2107<td>å°å符串 <code>nptr</code> 转æ¢ä¸º <code>double</code> 2108ç±»åæµ®ç¹æ°</td> 2109<td><code>nptr</code>ï¼æåè¦è½¬æ¢çåç¬¦ä¸²ï¼æ¯æç§å¦è®¡æ°æ³çæµ®ç¹æ ¼å¼ï¼</td> 2110<td>æåæ¶è¿å对åºç <code>double</code> å¼ï¼<br>è¥æ æ³è½¬æ¢ï¼è¿å 2111<code>0.0</code>ï¼æ é误æç¤ºï¼</td> 2112</tr> 2113<tr> 2114<td><code>strtol</code></td> 2115<td><code>long int strtol(const char *nptr, char **endptr, int base);</code></td> 2116<td>å°å符串 <code>nptr</code> 转æ¢ä¸º 2117<code>long int</code>ï¼æ¯æä»»æè¿å¶ï¼2~36 æ 0ï¼</td> 2118<td><code>nptr</code>ï¼è¦è½¬æ¢çå符串<br><code>endptr</code>ï¼è¥é 2119<code>NULL</code>ï¼æå转æ¢ç»æå¤çæéï¼å¯ç¨äºéè¯¯æ£æµï¼<br><code>base</code>ï¼è¿å¶ï¼0 2120表示èªå¨è¯å«ï¼</td> 2121<td>æåæ¶è¿å转æ¢åç <code>long int</code> å¼ï¼<br>è¥æº¢åºï¼è¿å 2122<code>LONG_MAX</code> æ <code>LONG_MIN</code> 并设置 2123<code>
2123errno</code>ï¼<br>è¥æ æ³è½¬æ¢ï¼è¿å <code>0</code></td> 2124</tr> 2125<tr> 2126<td><code>strtof</code></td> 2127<td><code>float strtof(const char *nptr, char **endptr);</code></td> 2128<td>å°å符串 <code>nptr</code> 转æ¢ä¸º <code>float</code> ç±»åæµ®ç¹æ°</td> 2129<td><code>nptr</code>ï¼è¦è½¬æ¢çå符串<br><code>endptr</code>ï¼è¥é 2130<code>NULL</code>ï¼æå转æ¢ç»æå¤çæéï¼å¯ç¨äºæ£æµéæ³åç¬¦ææ¯å¦å®å ¨è½¬æ¢ï¼</td> 2131<td>æåæ¶è¿å对åºç <code>float</code> å¼ï¼<br>è¥æº¢åºï¼è¿å 2132<code>±HUGE_VALF</code> 并设置 <code>errno</code>ï¼<br>è¥æ æ³è½¬æ¢ï¼è¿å 2133<code>0.0f</code></td> 2134</tr> 2135</tbody> 2136</table> 2137<blockquote> 2138<ul> 2139<li><code>atoi</code> å <code>atof</code> 2140䏿ä¾éè¯¯æ£æµæºå¶ï¼éå°éæ³è¾å ¥ä¼éé»è¿å 21410ï¼ä¸æ¨èç¨äºå¥å£®æ§è¦æ±é«çç¨åºã</li> 2142<li><code>strtol</code> å <code>strtof</code> æ¯ æ´å®å ¨ãåè½æ´å¼ºå¤§ 2143çæ¿ä»£æ¹æ¡ï¼æ¯æéè¯¯æ£æµï¼éè¿ <code>endptr</code> å 2144<code>errno</code>ï¼ã</li> 2145<li>ä½¿ç¨ <code>strtol</code> æ¶ï¼è¥ <code>base</code> 为 21460ï¼å½æ°ä¼æ ¹æ®å符串åç¼èªå¨å¤æè¿å¶ï¼<code>0x</code>/<code>0X</code> â 2147åå è¿å¶ï¼<code>0</code> â å «è¿å¶ï¼å¦å为åè¿å¶ã</li> 2148</ul> 2149</blockquote> 2150<h4 id="æ°å¼è½¬å符串">4.2.3 æ°å¼è½¬å符串</h4> 2151<p>è¿éæä¾ä¸¤ç§æ¯è¾å¸¸ç¨çè½¬æ¢æ¹å¼ã</p> 2152<p><strong><code>itoa()</code> 彿°ï¼</strong></p> 2153<ul> 2154<li><p>å®ä¹å¨ <code>stdlib.h</code> 头æä»¶å ã</p></li> 2155<li><p>å°æ´æ°è½¬æ¢ä¸ºå符串ã</p></li> 2156<li><p>彿°ååï¼</p> 2157<div class="sourceCode" id="cb66"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb66-1"><a href="#cb66-1" aria-hidden="true" tabindex="-1"></a><span class="dt">char</span> <span class="op">*</span>itoa<span class="op">(</span><span class="dt">int</span> value<span class="op">,</span> <span class="dt">char</span> <span class="op">*</span>str<span class="op">,</span> <span class="dt">int</span> base<span class="op">);</span></span></code></pre></div> 2158<ul> 2159<li><code>value</code>ï¼è¦è½¬æ¢çæ´æ°ã</li> 2160<li><code>str</code>ï¼ç¨äºåå¨ç»æçå符æ°ç»ã</li> 2161<li><code>base</code>ï¼è¿å¶ï¼å¦ 10 表示åè¿å¶ï¼2 表示äºè¿å¶ï¼16 2162表示åå è¿å¶ï¼ã</li> 2163</ul></li> 2164<li><p>注æï¼</p> 2165<ul> 2166<li>䏿¯ C æ ååºå½æ°ï¼å¨æäºç¼è¯å¨ï¼å¦ 2167GCCï¼ä¸å¯è½ä¸å¯ç¨ï¼å¯ç§»æ¤æ§å·®ã</li> 2168<li>常è§äº Windows å¹³å°ï¼å¦ MSVCï¼ï¼ä½å¨ Linux/GCC 2169ç¯å¢ä¸é叏䏿¯æã</li> 2170</ul></li> 2171</ul> 2172<p><strong><code>sprintf()</code> 彿°ï¼</strong></p> 2173<ul> 2174<li><p>å®ä¹å¨ <code>stdio.h</code> 头æä»¶å ã</p></li> 2175<li><p>å°æ ¼å¼åçæ°æ®åå ¥åç¬¦ä¸²ï¼æ¯æå¤ç§æ°æ®ç±»åï¼æ´æ°ãæµ®ç¹æ°çï¼ã</p></li> 2176<li><p>彿°ååï¼</p> 2177<div class="sourceCode" id="cb67"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb67-1"><a href="#cb67-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> sprintf<span class="op">(</span><span class="dt">char</span> <span class="op">*</span>str<span class="op">,</span> <span class="dt">const</span> <span class="dt">char</span> <span class="op">*</span>format<span class="op">,</span> <span class="op">...);</span></span></code></pre></div> 2178<ul> 2179<li><code>str</code>ï¼ç®æ å符串ç¼å²åºã</li> 2180<li><code>format</code>ï¼æ ¼å¼æ§å¶å符串ï¼å¦ 2181<code>"%d"</code>ã<code>"%x"</code>ï¼ã</li> 2182<li>åç»åæ°ï¼è¦æ ¼å¼åçå¼ã</li> 2183</ul></li> 2184<li><p>注æï¼</p> 2185<ul> 2186<li>ä¸è¿è¡ç¼å²åºæº¢åºæ£æ¥ï¼ä½¿ç¨æ¶éç¡®ä¿ç®æ ç¼å²åºè¶³å¤å¤§ã</li> 2187<li>æ´å®å ¨çæ¿ä»£æ¯ <code>snprintf()</code>ï¼å¯æå®æå¤§åå ¥é¿åº¦ï¼ã</li> 2188</ul></li> 2189</ul> 2190<h3 id="æ°å¼ç¸å ³">4.3 æ°å¼ç¸å ³</h3> 2191<h4 id="æ°å¦å½æ°">4.3.1 æ°å¦å½æ°</h4> 2192<p>æ¬èæä»ç»ç彿°åå®ä¹å¨ <code>math.h</code> 头æä»¶ä¸ã</p> 2193<table> 2194<colgroup> 2195<col style="width: 3%" /> 2196<col style="width: 19%" /> 2197<col style="width: 21%" /> 2198<col style="width: 21%" /> 2199<col style="width: 34%" /> 2200</colgroup> 2201<thead> 2202<tr> 2203<th>彿°å</th> 2204<th>åå</th> 2205<th>åè½</th> 2206<th>åæ°</th> 2207<th>è¿åå¼</th> 2208</tr> 2209</thead> 2210<tbody> 2211<tr> 2212<td><code>fabs</code></td> 2213<td><code>double fabs(double x);</code></td> 2214<td>è®¡ç®æµ®ç¹æ°çç»å¯¹å¼</td> 2215<td><code>x</code>ï¼è¦åç»å¯¹å¼çæµ®ç¹æ°</td> 2216<td>è¿å <code>|x|</code>ï¼éè´ <code>double</code>ï¼</td> 2217</tr> 2218<tr> 2219<td><code>fmod</code></td> 2220<td><code>double fmod(double x, double y);</code></td> 2221<td>è®¡ç®æµ®ç¹æ°é¤æ³ç使°ï¼<code>x / y</code> ç使°ï¼</td> 2222<td><code>x</code>ï¼è¢«é¤æ°<br><code>y</code>ï¼é¤æ°ï¼<code>y â 0</code>ï¼</td> 2223<td>è¿å <code>x - n*y</code>ï¼å ¶ä¸ <code>n</code> æ¯ <code>x/y</code> 2224çæ´æ°é¨åï¼åé¶åæ´ï¼ï¼è¥ <code>y = 0</code>ï¼ç»ææªå®ä¹æè¿å 2225<code>NaN</code></td> 2226</tr> 2227<tr> 2228<td><code>exp</code></td> 2229<td><code>double exp(double x);</code></td> 2230<td>计ç®èªç¶ææ°å½æ° ( e^x )</td> 2231<td><code>x</code>ï¼ææ°</td> 2232<td>è¿å ( e^x )</td> 2233</tr> 2234<tr> 2235<td><code>exp2</code></td> 2236<td><code>double exp2(double x);</code></td> 2237<td>计ç®ä»¥ 2 为åºçææ°å½æ° ( 2^x )</td> 2238<td><code>x</code>ï¼ææ°</td> 2239<td>è¿å ( 2^x )</td> 2240</tr> 2241<tr> 2242<td><code>log</code></td> 2243<td><code>double log(double x);</code></td> 2244<td>计ç®èªç¶å¯¹æ°ï¼ä»¥ ( e ) 为åºï¼</td> 2245<td><code>x</code>ï¼çæ°ï¼<code>x > 0</code>ï¼</td> 2246<td>è¿å ( (x) )ï¼è¥ <code>x ⤠0</code>ï¼è¿å <code>-HUGE_VAL</code> æ 2247<code>NaN</code> å¹¶å¯è½è®¾ç½® <code>
2247errno</code></td> 2248</tr> 2249<tr> 2250<td><code>log2</code></td> 2251<td><code>double log2(double x);</code></td> 2252<td>计ç®ä»¥ 2 为åºç对æ°</td> 2253<td><code>x</code>ï¼çæ°ï¼<code>x > 0</code>ï¼</td> 2254<td>è¿å ( _2(x) )</td> 2255</tr> 2256<tr> 2257<td><code>log10</code></td> 2258<td><code>double log10(double x);</code></td> 2259<td>计ç®ä»¥ 10 为åºç对æ°</td> 2260<td><code>x</code>ï¼çæ°ï¼<code>x > 0</code>ï¼</td> 2261<td>è¿å ( _{10}(x) )</td> 2262</tr> 2263<tr> 2264<td><code>pow</code></td> 2265<td><code>double pow(double x, double y);</code></td> 2266<td>è®¡ç® ( x^y )</td> 2267<td><code>x</code>ï¼åºæ°<br><code>y</code>ï¼ææ°</td> 2268<td>è¿å ( x^y )ï¼è¥å¹²éæ³ï¼å¦ 2269<code>0^0</code>ãè´æ°å¼éæ´æ°æ¬¡æ¹ï¼ï¼è¿å <code>NaN</code> æè®¾ç½® 2270<code>errno</code></td> 2271</tr> 2272<tr> 2273<td><code>sqrt</code></td> 2274<td><code>double sqrt(double x);</code></td> 2275<td>计ç®å¹³æ¹æ ¹ ( )</td> 2276<td><code>x</code>ï¼è¢«å¼æ¹æ°ï¼<code>x ⥠0</code>ï¼</td> 2277<td>è¿å ( )ï¼è¥ <code>x < 0</code>ï¼è¿å <code>NaN</code></td> 2278</tr> 2279<tr> 2280<td><code>sin</code></td> 2281<td><code>double sin(double x);</code></td> 2282<td>è®¡ç®æ£å¼¦å¼ï¼å¼§åº¦å¶ï¼</td> 2283<td><code>x</code>ï¼å¼§åº¦è§</td> 2284<td>è¿å ((x))ï¼èå´ ([-1, 1])</td> 2285</tr> 2286<tr> 2287<td><code>cos</code></td> 2288<td><code>double cos(double x);</code></td> 2289<td>计ç®ä½å¼¦å¼ï¼å¼§åº¦å¶ï¼</td> 2290<td><code>x</code>ï¼å¼§åº¦è§</td> 2291<td>è¿å ((x))ï¼èå´ ([-1, 1])</td> 2292</tr> 2293<tr> 2294<td><code>tan</code></td> 2295<td><code>double tan(double x);</code></td> 2296<td>è®¡ç®æ£åå¼ï¼å¼§åº¦å¶ï¼</td> 2297<td><code>x</code>ï¼å¼§åº¦è§ï¼é¿å 奿°å ( /2 )ï¼</td> 2298<td>è¿å ((x))ï¼å¨å¥æ°å ( /2 ) éè¿å¯è½æº¢åº</td> 2299</tr> 2300<tr> 2301<td><code>asin</code></td> 2302<td><code>double asin(double x);</code></td> 2303<td>计ç®åæ£å¼¦ï¼å¼§åº¦å¶ï¼</td> 2304<td><code>x</code>ï¼è¾å ¥å¼ï¼<code>-1 ⤠x ⤠1</code>ï¼</td> 2305<td>è¿å ((x))ï¼èå´ ([-/2, /2])ï¼è¥ <code>|x| > 1</code>ï¼è¿å 2306<code>NaN</code></td> 2307</tr> 2308<tr> 2309<td><code>acos</code></td> 2310<td><code>double acos(double x);</code></td> 2311<td>计ç®åä½å¼¦ï¼å¼§åº¦å¶ï¼</td> 2312<td><code>x</code>ï¼è¾å ¥å¼ï¼<code>-1 ⤠x ⤠1</code>ï¼</td> 2313<td>è¿å ((x))ï¼èå´ ([0, ])ï¼è¥ <code>|x| > 1</code>ï¼è¿å 2314<code>NaN</code></td> 2315</tr> 2316<tr> 2317<td><code>atan</code></td> 2318<td><code>double atan(double x);</code></td> 2319<td>计ç®åæ£åï¼å¼§åº¦å¶ï¼</td> 2320<td><code>x</code>ï¼ä»»æå®æ°</td> 2321<td>è¿å ((x))ï¼èå´ ([-/2, /2])</td> 2322</tr> 2323<tr> 2324<td><code>ceil</code></td> 2325<td><code>double ceil(double x);</code></td> 2326<td>åä¸åæ´ï¼ä¸å°äº <code>x</code> çæå°æ´æ°ï¼</td> 2327<td><code>x</code>ï¼æµ®ç¹æ°</td> 2328<td>è¿åä¸å°äº <code>x</code> çæå°æ´æ°å¼ï¼<code>double</code> 2329ç±»åï¼</td> 2330</tr> 2331<tr> 2332<td><code>floor</code></td> 2333<td><code>double floor(double x);</code></td> 2334<td>åä¸åæ´ï¼ä¸å¤§äº <code>x</code> çæå¤§æ´æ°ï¼</td> 2335<td><code>x</code>ï¼æµ®ç¹æ°</td> 2336<td>è¿åä¸å¤§äº <code>x</code> çæå¤§æ´æ°å¼ï¼<code>double</code> 2337ç±»åï¼</td> 2338</tr> 2339</tbody> 2340</table> 2341<blockquote> 2342<ul> 2343<li>å¯¹äº <code>float</code> å <code>long double</code> ç±»åï¼C99 2344èµ·æä¾äºå¯¹åºç <code>f</code>/<code>l</code> åç¼çæ¬ï¼å¦ 2345<code>sinf</code>, <code>sqrtl</code> çï¼ã</li> 2346<li>è¾å ¥éæ³å¼ï¼å¦è´æ°å对æ°ãè´æ°å¼å¹³æ¹çï¼é常ä¼å¯¼è´è¿å 2347<code>NaN</code> ã</li> 2348<li>ä¸è§å½æ°çåæ°åä½ä¸º<strong>弧度</strong>ã</li> 2349</ul> 2350</blockquote> 2351<h4 id="ä¼ªéæºæ°">4.3.2 ä¼ªéæºæ°</h4> 2352<p>æ¬èæä»ç»ç彿°åå®ä¹å¨ <code>stdlib.h</code> 头æä»¶ä¸ã</p> 2353<p><strong><code>srand()</code> 彿°ï¼</strong></p> 2354<ul> 2355<li>åå为 <code>void srand( unsigned seed );</code></li> 2356<li>ä»¥å¼ <code>seed</code> æç§ <code>rand()</code> 2357æç¨çéæºæ°çæå¨ã</li> 2358</ul> 2359<p><strong><code>rand()</code> 彿°ï¼</strong></p> 2360<ul> 2361<li>åå为 <code>int rand();</code></li> 2362<li>è¿å <code>0</code> ä¸ <code>RAND_MAX</code> é´çéæºæ´æ°å¼ï¼å å« 2363<code>0</code> ä¸ <code>RAND_MAX</code> ï¼ã</li> 2364</ul> 2365<p><code>srand()</code> æç§ <code>rand()</code> 2366æç¨çä¼ªéæºæ°çæå¨ãè¥å¨ä»»ä½å¯¹ <code>srand()</code> çè°ç¨åä½¿ç¨ 2367<code>rand()</code> ï¼å <code>rand()</code> 表ç°å¦åå®ä»¥ 2368<code>srand(1)</code> æç§ãæ¯æ¬¡ä»¥ <code>srand()</code> æç§ 2369<code>rand()</code> æ¶ï¼å®å¿ 须产çç¸åç弿°åã</p> 2370<p>æ åä¿è¯ <code>RAND_MAX</code> è³å°ä¸º <code>32767</code> ã</p> 2371<h3 id="æåº">4.4 æåº</h3> 2372<blockquote> 2373<p>å¿«éæåºçç®æ³å 容ä¸å¨æ¬è®²ä¹çå 容èå´ä¸ï¼å ·ä½å¯ä»¥åè <a 2374target="_blank" rel="noopener" href="https://oi-wiki.org/basic/quick-sort/">å¿«éæåº - OI Wiki</a> 2375ã</p> 2376</blockquote> 2377<p>å¿«éæåºç®æ³å¨ C å®ç°ä¸çåç§°æ¯ <code>qsort()</code>ï¼å®ä¹å¨ 2378<code>
2378stdlib.h</code> 头æä»¶ä¸ã<code>qsort()</code> 2379彿°æåºæ°ç»çæ°æ®å¯¹è±¡ï¼å ¶ååå¦ä¸ï¼</p> 2380<div class="sourceCode" id="cb68"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb68-1"><a href="#cb68-1" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> qsort<span class="op">(</span><span class="dt">void</span> <span class="op">*</span>base<span class="op">,</span> <span class="dt">size_t</span> nmemb<span class="op">,</span> <span class="dt">size_t</span> size<span class="op">,</span> <span class="dt">int</span> <span class="op">(*</span>compar<span class="op">)(</span><span class="dt">const</span> <span class="dt">void</span> <span class="op">*,</span> <span class="dt">const</span> <span class="dt">void</span> <span class="op">*));</span></span></code></pre></div> 2381<p>第 1 ä¸ªåæ°æ¯æéï¼æåå¾ æåºæ°ç»çé¦å ç´ ãANSI C 2382å 许ææå任使°æ®ç±»åçæé强å¶è½¬æ¢ææå <code>void</code> 2383çæéï¼å æ¤ï¼<code>qsort()</code> ç第 1 2384个å®é åæ°å¯ä»¥å¼ç¨ä»»ä½ç±»åçæ°ç»ã</p> 2385<p>第 2 ä¸ªåæ°æ¯å¾ æåºé¡¹çæ°éã彿°ååæè¯¥å¼è½¬æ¢ä¸º <code>size_t</code> 2386ç±»åã<code>size_t</code> å®ä¹å¨æ å头æä»¶ä¸ï¼æ¯ <code>sizeof</code> 2387è¿ç®ç¬¦è¿åçæ´æ°ç±»åã</p> 2388<p>ç±äº <code>qsort()</code> æç¬¬1ä¸ªåæ°è½¬æ¢ä¸º <code>void</code> 2389æéï¼æä»¥ <code>qsort()</code> 2390ä¸ç¥éæ°ç»ä¸æ¯ä¸ªå ç´ ç大å°ã为æ¤ï¼å½æ°ååç¨ç¬¬ 3 2391ä¸ªåæ°è¡¥å¿è¿ä¸ä¿¡æ¯ï¼æ¾å¼ææå¾ æåºæ°ç»ä¸æ¯ä¸ªå ç´ ç大å°ãä¾å¦ï¼å¦ææåº 2392<code>double</code> ç±»åçæ°ç»ï¼é£ä¹ç¬¬ 3 ä¸ªåæ°åºè¯¥æ¯ 2393<code>sizeof(double)</code>ã</p> 2394<p>æåï¼<code>qsort()</code> 2395è¿éè¦ä¸ä¸ªæå彿°çæéï¼è¿ä¸ªè¢«æéæåçæ¯è¾å½æ°äºç¡®å®æåºç顺åºãè¯¥å½æ°åºæ¥åä¸¤ä¸ªåæ°ï¼å嫿åå¾ æ¯è¾ä¸¤é¡¹çæéãå¦æç¬¬ 23961 项çå¼å¤§äºç¬¬ 2 é¡¹ï¼æ¯è¾å½æ°åè¿åæ£æ°ï¼å¦æä¸¤é¡¹ç¸åï¼åè¿å 0ï¼å¦æç¬¬ 23971 项çå¼å°äºç¬¬ 2 项ï¼åè¿åè´æ°ã<code>qsort()</code> 2398æ ¹æ®ç»å®çå ¶ä»ä¿¡æ¯è®¡ç®åºä¸¤ä¸ªæéçå¼ï¼ç¶åæå®ä»¬ä¼ éç»æ¯è¾å½æ°ã</p> 2399<p><code>qsort()</code> ååä¸ç第 4 ä¸ªå½æ°ç¡®å®äºæ¯è¾å½æ°çå½¢å¼ï¼</p> 2400<div class="sourceCode" id="cb69"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb69-1"><a href="#cb69-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="op">(*</span>compar<span class="op">)(</span><span class="dt">const</span> <span class="dt">void</span> <span class="op">*,</span> <span class="dt">const</span> <span class="dt">void</span> <span class="op">*)</span></span></code></pre></div> 2401<p>è¿è¡¨æ <code>qsort()</code> 2402æåä¸ä¸ªåæ°æ¯ä¸ä¸ªæå彿°çæéï¼è¯¥å½æ°è¿å <code>int</code> 2403ç±»åçå¼ä¸æ¥å两个æå <code>const void</code> 2404çæéä½ä¸ºåæ°ï¼è¿ä¸¤ä¸ªæéæåå¾ æ¯è¾é¡¹ã</p> 2405<h3 id="æè¨">4.5 æè¨</h3> 2406<p><code>assert.h</code> 2407头æä»¶æ¯æçæè¨åºæ¯ä¸ä¸ªç¨äºè¾ å©è°è¯ç¨åºçå°ååºãå®ç± 2408<code>assert()</code> 2409å®ç»æï¼æ¥åä¸ä¸ªæ´å表达å¼ä½ä¸ºåæ°ãå¦æè¡¨è¾¾å¼æ±å¼ä¸ºåï¼éé¶ï¼ï¼<code>assert()</code> 2410å®å°±å¨æ åé误æµï¼<code>stderr</code>ï¼ä¸åå ¥ä¸æ¡é误信æ¯ï¼å¹¶è°ç¨ 2411<code>abort()</code> 彿°ç»æ¢ç¨åºï¼<code>abort()</code> 彿°çååå¨ 2412<code>stdlib.h</code> 头æä»¶ä¸ï¼ã<code>assert()</code> 2413宿¯ä¸ºäºæ è¯åºç¨åºä¸æäºæ¡ä»¶ä¸ºççå ³é®ä½ç½®ï¼å¦æå ¶ä¸çä¸ä¸ªå ·ä½æ¡ä»¶ä¸ºåï¼å°±ç¨ 2414<code>assert()</code> è¯å¥ç»æ¢ç¨åºãé常ï¼<code>assert()</code> 2415çåæ°æ¯ä¸ä¸ªæ¡ä»¶è¡¨è¾¾å¼æé»è¾è¡¨è¾¾å¼ã妿 <code>assert()</code> 2416䏿¢äºç¨åºï¼å®é¦å 伿¾ç¤ºå¤±è´¥çæµè¯ãå 嫿µè¯çæä»¶ååè¡å·ã</p> 2417<p>示ä¾ç¨åºï¼</p> 2418<div class="sourceCode" id="cb70"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb70-1"><a href="#cb70-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><assert.h></span></span> 2419<span id="cb70-2"><a href="#cb70-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 2420<span id="cb70-3"><a href="#cb70-3" aria-hidden="true" tabindex="-1"></a></span> 2421<span id="cb70-4"><a href="#cb70-4" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 2422<span id="cb70-5"><a href="#cb70-5" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 2423<span id="cb70-6"><a href="#cb70-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> x <span class="op">=</span> <span class="dv">5</span><span class="op">;</span></span> 2424<span id="cb70-7"><a href="#cb70-7" aria-hidden="true" tabindex="-1"></a> assert<span class="op">(</span>x <span class="op">></span> <span class="dv">0</span><span class="op">);</span> <span class="co">// æ¡ä»¶ä¸ºçï¼ç¨åºç»§ç»è¿è¡</span></span> 2425<span id="cb70-8"><a href="#cb70-8" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"x is positive.</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span> 2426<span id="cb70-9"><a href="#cb70-9" aria-hidden="true" tabindex="-1"></a></span> 2427<span id="cb70-10"><a href="#cb70-10" aria-hidden="true" tabindex="-1"></a> x <span class="op">=</span> <span class="op">-</span><span class="dv">1</span><span class="op">;</span></span> 2428<span id="cb70-11"><a href="#cb70-11" aria-hidden="true" tabindex="-1"></a> assert<span class="op">(</span>x <span class="op">></span> <span class="dv">0</span><span class="op">);</span> <span class="co">// æ¡ä»¶ä¸ºåï¼ç¨åºç»æ¢å¹¶è¾åºé误信æ¯</span></span> 2429<span id="cb70-12"><a href="#cb70-12" aria-hidden="true" tabindex="-1"></a></span> 2430<span id="cb70-13"><a href="#cb70-13" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 2431<span id="cb70-14"><a href="#cb70-14" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 2432<p>示ä¾è¾åºï¼</p> 2433<pre><code>x is positive. 2434Assertion failed: x > 0, file test.c, line 11</code></pre> 2435<p>ä½¿ç¨ <code>assert()</code> 2436æå 个好å¤ï¼å®ä¸ä» è½èªå¨æ è¯æä»¶ååºé®é¢çè
2436¡å·ï¼è¿æä¸ç§æ éæ´æ¹ä»£ç å°±è½å¼å¯æå ³é 2437<code>assert()</code> çæºå¶ãå¦æè®¤ä¸ºå·²ç»æé¤äºç¨åºç 2438bugï¼å°±å¯ä»¥æä¸é¢çå®å®ä¹åå¨å å« <code>assert.h</code> çä½ç½®åé¢ï¼</p> 2439<div class="sourceCode" id="cb72"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb72-1"><a href="#cb72-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define NDEBUG</span></span></code></pre></div> 2440<p>å¹¶éæ°ç¼è¯ç¨åºï¼è¿æ ·ç¼è¯å¨å°±ä¼ç¦ç¨æä»¶ä¸çææ <code>assert()</code> 2441è¯å¥ã妿ç¨åºååºç°é®é¢ï¼å¯ä»¥ç§»é¤è¿æ¡ <code>#define</code> 2442æä»¤ï¼æè æå®æ³¨éæï¼ï¼ç¶åéæ°ç¼è¯ç¨åºï¼è¿æ ·å°±éæ°å¯ç¨äº 2443<code>assert()</code> è¯å¥ã</p> 2444<h2 id="æé¡¹">5 æé¡¹</h2> 2445<h3 id="åéå½åè§å">5.1 åéå½åè§å</h3> 2446<p><strong>æ è¯ç¬¦</strong>æ¯æ°åãä¸å线ãå°åå大åæä¸åæ¯å以 2447<code>\u</code> å <code>\U</code> 转ä¹è®°å·æå®ç Unicode å符 (C99 2448èµ·)çä»»æé¿åº¦åºåãåæ³çæ è¯ç¬¦å¿ 须以鿰ååç¬¦ï¼æä¸åæ¯ãä¸å线æ 2449Unicode éæ°åå符 (C99 2450èµ·)ï¼å¼å§ãæ è¯ç¬¦å¤§å°åæå«ï¼å°åå大å忝ä¸åï¼ã</p> 2451<div class="sourceCode" id="cb73"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb73-1"><a href="#cb73-1" aria-hidden="true" tabindex="-1"></a><span class="dt">char</span> <span class="op">*</span>\U0001f431 <span class="op">=</span> <span class="st">"cat"</span><span class="op">;</span> <span class="co">// 忝æ</span></span> 2452<span id="cb73-2"><a href="#cb73-2" aria-hidden="true" tabindex="-1"></a><span class="dt">char</span> <span class="op">*</span>ð± <span class="op">=</span> <span class="st">"cat"</span><span class="op">;</span> <span class="co">// å®ç°å®ä¹ï¼ Clang å¯ç¨ï¼ä½çæ¬ 10 åç GCC ä¸å¯ï¼</span></span></code></pre></div> 2453<p>ä¸åæ è¯ç¬¦è¢«ä¿çï¼èä¸ä¸å¯å¨ç¨åºä¸å£°æï¼è¿ä¹åä¼å¼èµ·æªå®ä¹è¡ä¸ºï¼ï¼</p> 2454<ol type="1"> 2455<li>ä½ä¸ºå ³é®è¯çæ è¯ç¬¦ä¸è½ç¨äºå ¶ä»ç®çãå ·ä½èè¨ï¼ä¸å 许 2456<code>#define</code> æ <code>#undef</code> çåäºå ³é®è¯çæ è¯ç¬¦ã</li> 2457<li>ææä»¥ä¸ä¸ªä¸å线å¼å§çå¤é¨æ è¯ç¬¦ã</li> 2458<li>ææä»¥ä¸ä¸ªä¸å线åéä¸ä¸ªå¤§å忝æå¦ä¸ä¸å线å¼å§çæ è¯ç¬¦ï¼è¿äºä¿çæ è¯ç¬¦å 许åºä½¿ç¨å¤§éå¹åçéå¤é¨å®å彿°ï¼ã</li> 2459<li>æ ååºæå®ä¹çææå¤é¨æ è¯ç¬¦ï¼å¨æå®¿ä¸»ç¯å¢ä¸ï¼ãè¿è¡¨ç¤ºä¸å è®¸ç¨æ·æä¾çå¤é¨åç§°å¹é ä»»ä½åºåç§°ï¼å³ä½¿æ¯å£°æçåäºåºå½æ°ç彿°ä¹ä¸å 许ã</li> 2460<li>声æä¸ºæ ååºä¸ºæªæ¥ä½¿ç¨ä¿ççæ è¯ç¬¦ã</li> 2461</ol> 2462<h3 id="è¿ç®ç¬¦ä¼å 级">5.2 è¿ç®ç¬¦ä¼å 级</h3> 2463<table> 2464<colgroup> 2465<col style="width: 8%" /> 2466<col style="width: 46%" /> 2467<col style="width: 34%" /> 2468<col style="width: 10%" /> 2469</colgroup> 2470<thead> 2471<tr> 2472<th>ä¼å 级</th> 2473<th>è¿ç®ç¬¦</th> 2474<th>åç§° / 说æ</th> 2475<th>ç»åæ¹å</th> 2476</tr> 2477</thead> 2478<tbody> 2479<tr> 2480<td>1</td> 2481<td><code>[] () . -></code></td> 2482<td>䏿 ã彿°è°ç¨ãç»æä½æå</td> 2483<td>å·¦ â å³</td> 2484</tr> 2485<tr> 2486<td>2</td> 2487<td><code>! ~ ++ -- + - * & sizeof (type)</code></td> 2488<td>ä¸å è¿ç®ç¬¦</td> 2489<td>å³ â å·¦</td> 2490</tr> 2491<tr> 2492<td>3</td> 2493<td><code>* / %</code></td> 2494<td>ä¹ãé¤ã忍¡</td> 2495<td>å·¦ â å³</td> 2496</tr> 2497<tr> 2498<td>4</td> 2499<td><code>+ -</code></td> 2500<td>å ãå</td> 2501<td>å·¦ â å³</td> 2502</tr> 2503<tr> 2504<td>5</td> 2505<td><code><< >></code></td> 2506<td>ä½ç§»</td> 2507<td>å·¦ â å³</td> 2508</tr> 2509<tr> 2510<td>6</td> 2511<td><code>< <= > >=</code></td> 2512<td>å ³ç³»è¿ç®</td> 2513<td>å·¦ â å³</td> 2514</tr> 2515<tr> 2516<td>7</td> 2517<td><code>== !=</code></td> 2518<td>ç¸ç / ä¸ç</td> 2519<td>å·¦ â å³</td> 2520</tr> 2521<tr> 2522<td>8</td> 2523<td><code>&</code></td> 2524<td>æä½ä¸</td> 2525<td>å·¦ â å³</td> 2526</tr> 2527<tr> 2528<td>9</td> 2529<td><code>^</code></td> 2530<td>æä½å¼æ</td> 2531<td>å·¦ â å³</td> 2532</tr> 2533<tr> 2534<td>10</td> 2535<td><code>|</code></td> 2536<td>æä½æ</td> 2537<td>å·¦ â å³</td> 2538</tr> 2539<tr> 2540<td>11</td> 2541<td><code>&&</code></td> 2542<td>é»è¾ä¸</td> 2543<td>å·¦ â å³</td> 2544</tr> 2545<tr> 2546<td>12</td> 2547<td><code>||</code></td> 2548<td>é»è¾æ</td> 2549<td>å·¦ â å³</td> 2550</tr> 2551<tr> 2552<td>13</td> 2553<td><code>?:</code></td> 2554<td>æ¡ä»¶è¿ç®ç¬¦</td> 2555<td>å³ â å·¦</td> 2556</tr> 2557<tr> 2558<td>14</td> 2559<td><code>= += -= *= /= %= <<= >>= &= ^= |=</code></td> 2560<td>èµå¼è¿ç®ç¬¦</td> 2561<td>å³ â å·¦</td> 2562</tr> 2563<tr> 2564<td>15</td> 2565<td><code>,</code></td> 2566<td>éå·è¿ç®ç¬¦</td> 2567<td>å·¦ â å³</td> 2568</tr> 2569</tbody> 2570</table> 2571<blockquote> 2572<ul> 2573<li>ä¼å 级æé«ï¼<code>[] () . -></code></li> 2574<li>ä¸å è¿ç®ç¬¦ï¼ç»ä¸å³ç»å</li> 2575<li>èµå¼è¿ç®ç¬¦ï¼ç»ä¸å³ç»å</li> 2576<li>éå·è¿ç®ç¬¦ï¼ä¼å 级æä½</li> 2577<li><code>sizeof</code> æ¯è¿ç®ç¬¦ï¼ä¸æ¯å½æ°</li> 2578</ul> 2579</blockquote> 2580<h3 id="å¤æç±»åå£°ææ¨æ">5.3 å¤æç±»åå£°ææ¨æ</h3> 2581<p>åºæ¬ååï¼å³å·¦æ³å/èºææ³åï¼ï¼</p> 2582<ol type="1"> 2583<li>ä»åéåå¼å§ã</li> 2584<li><strong>å åå³ç</strong>ï¼ç´å°éå° <code>)</code> æ <code>;</code> 2585ææ°ç»/彿°ç¬¦å·ã</li> 2586<li><strong>ååå·¦ç</strong>ï¼å¤çæé <code>*</code> çã</li> 2587<li>éå°æ¬å· <code>()</code> æ <code>[]</code> 2588æ¶ï¼é注æä¼å çº§ï¼æ¬å·å¯æ¹åç»å顺åºï¼ã</li> 2589<li>
2589éå¤ä¸è¿°è¿ç¨ï¼ç´å°æ´ä¸ªå£°æè§£æå®æ¯ã</li> 2590</ol> 2591<p>示ä¾ï¼</p> 2592<div class="sourceCode" id="cb74"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb74-1"><a href="#cb74-1" aria-hidden="true" tabindex="-1"></a><span class="dt">char</span> <span class="op">(*(*</span>x<span class="op">[</span><span class="dv">3</span><span class="op">])())[</span><span class="dv">5</span><span class="op">];</span></span></code></pre></div> 2593<p>ä»åéå <code>x</code> åºåï¼éå±åå¤åæï¼</p> 2594<ol type="1"> 2595<li><code>x[3]</code> â <code>x</code> æ¯ä¸ä¸ªå å« 3 个å ç´ çæ°ç»ã<br /> 2596</li> 2597<li><code>*x[3]</code> ç»å为 <code>(*x[i])()</code> â æ¯ä¸ªå ç´ 2598<code>x[i]</code> æ¯ä¸ä¸ªæå彿°çæéã<br /> 2599</li> 2600<li><code>(*x[i])()</code> â è¯¥å½æ°æ åæ°ï¼è°ç¨åè¿åä¸ä¸ªæéã<br /> 2601</li> 2602<li><code>(*(...))</code> â è¿åçæ¯ä¸ä¸ªæéï¼æå 2603<code>char [5]</code>ã<br /> 2604</li> 2605<li><code>char (...) [5]</code> â 该æéç±»å为 2606<code>char (*)[5]</code>ï¼æåé¿åº¦ä¸º 5 ç <code>char</code> 2607æ°ç»ï¼ã</li> 2608</ol> 2609<p>æç»å«ä¹ï¼<code>x</code> æ¯ä¸ä¸ªå å« 3 2610个å ç´ çæ°ç»ï¼æ¯ä¸ªå ç´ æ¯ä¸ä¸ªå½æ°æéï¼è¯¥å½æ°è¿åä¸ä¸ªæå 2611<code>char[5]</code> æ°ç»çæéã</p> 2612<p>çä»· <code>typedef</code> åæ³ï¼</p> 2613<div class="sourceCode" id="cb75"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb75-1"><a href="#cb75-1" aria-hidden="true" tabindex="-1"></a><span class="kw">typedef</span> <span class="dt">char</span> <span class="op">(*</span>ArrayPtr<span class="op">)[</span><span class="dv">5</span><span class="op">];</span> <span class="co">// æå char[5] çæé</span></span> 2614<span id="cb75-2"><a href="#cb75-2" aria-hidden="true" tabindex="-1"></a><span class="kw">typedef</span> ArrayPtr <span class="op">(*</span>FuncPtr<span class="op">)();</span> <span class="co">// è¿å ArrayPtr ç彿°æé</span></span> 2615<span id="cb75-3"><a href="#cb75-3" aria-hidden="true" tabindex="-1"></a>FuncPtr x<span class="op">[</span><span class="dv">3</span><span class="op">];</span> <span class="co">// x æ¯ FuncPtr ç±»åçæ°ç»</span></span></code></pre></div> 2616<h3 id="彿°åå">5.4 彿°åå</h3> 2617<p>彿°å忝æå¨è°ç¨å½æ°ä¹å坹彿°ç声æï¼å ¶ä¸è¬å½¢å¼ä¸ºï¼</p> 2618<pre><code>è¿åç±»å 彿°å(åæ°ç±»åå表);</code></pre> 2619<p>ä¾å¦ï¼</p> 2620<div class="sourceCode" id="cb77"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb77-1"><a href="#cb77-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> add<span class="op">(</span><span class="dt">int</span> a<span class="op">,</span> <span class="dt">int</span> b<span class="op">);</span></span></code></pre></div> 2621<p>æ¦å¿µï¼</p> 2622<p>彿°åååè¯ç¼è¯å¨æä¸ªå½æ°çåç§°ãè¿åç±»å以ååæ°çç±»ååæ°éï¼ä½ä¸å å«å½æ°ä½ï¼å³å ·ä½å®ç°ï¼ã</p> 2623<p>ä½ç¨ï¼</p> 2624<ol type="1"> 2625<li>ç±»åæ£æ¥ï¼ä½¿ç¼è¯å¨è½å¤å¨å½æ°è°ç¨å¤æ£æ¥åæ°ä¸ªæ°åç±»åæ¯å¦å¹é ï¼æé«ç¨åºçå®å ¨æ§åå¯é æ§ã</li> 2626<li>æ¯æå½æ°å¨å®ä¹å被è°ç¨ï¼Cè¯è¨è¦æ±å¨ä½¿ç¨å½æ°åå¿ é¡»ç¥éå ¶åå¨ï¼éè¿å½æ°ååå¯ä»¥å¨å½æ°å®ä¹ä¹åè°ç¨å®ï¼ä¾å¦å¨ 2627<code>main</code> 彿°ä¸è°ç¨å颿å®ä¹ç彿°ï¼ã</li> 2628<li>æé«ä»£ç å¯è¯»æ§å模ååï¼é常å°å½æ°ååæ¾å¨å¤´æä»¶ï¼<code>.h</code>ï¼ä¸ï¼ä¾¿äºå ¶ä»æºæä»¶å å«å使ç¨ï¼æå©äºå¤§å项ç®çç»ç»åç»´æ¤ã</li> 2629</ol> 2630<h3 id="å°¾éå½">5.5 å°¾éå½</h3> 2631<blockquote> 2632<p>æ¬èå 容ä¸åéç¹ä»ç»ãå ³äº<strong>éå½</strong>ï¼<strong>è¿ä»£éå½</strong>å 2633<strong>CPS éå½</strong>çå ·ä½å 容å¯ä»¥åèç¬è çå¦ä¸ç¯å客 <a 2634href="https://lonion1124.github.io/posts/52db781ce079/#recursion%E9%80%92%E5%BD%92%E7%9A%84%E8%BF%9B%E4%B8%80%E6%AD%A5%E6%8E%A2%E8%AE%A8">Recursionï¼éå½çè¿ä¸æ¥æ¢è®¨</a>ã</p> 2635</blockquote> 2636<p>éå½å½æ°å¨è¿è¡æ¶å¾å¾ä¼å ç¨æ¯è¾å¤çèµæºï¼åå å¯ä»¥ææ¶ç解为 CPU 2637è°ç¨å½æ°æ¶éè¦åå¨é¢å¤çæ°æ®ï¼ï¼å¨å¯è½çæ åµä¸åºè¯¥å°½éå°éå½è¿ç¨è½¬æ¢ä¸ºè¿ä»£è¿ç¨ãä¸è¬æ¥è¯´ï¼<strong>å°¾éå½</strong>彿°å¯ä»¥æ¯è¾ç®åå°ä½¿ç¨è¿ä»£ï¼å¾ªç¯ï¼è¿ç¨çä»·å®ç°ã</p> 2638<p>示ä¾ç¨åºï¼</p> 2639<div class="sourceCode" id="cb78"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb78-1"><a href="#cb78-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> factorial<span class="op">(</span><span class="dt">int</span> n<span class="op">)</span></span> 2640<span id="cb78-2"><a href="#cb78-2" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 2641<span id="cb78-3"><a href="#cb78-3" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>n <span class="op">==</span> <span class="dv">0</span><span class="op">)</span></span> 2642<span id="cb78-4"><a href="#cb78-4" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">1</span><span class="op">;</span></span> 2643<span id="cb78-5"><a href="#cb78-5" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> n <span class="op">*</span> factorial<span class="op">(</span>n <span class="op">-</span> <span class="dv">1</span><span class="op">);</span></span> 2644<span id="cb78-6"><a href="#cb78-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 2645<p>å®åä¸é¢çç¨åºçä»·ï¼</p> 2646<div class="sourceCode" id="cb79"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb79-1"><a href="#cb79-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> fact_iter<span class="op">(</span><span class="dt">int</span> product<span class="op">,</span> <span class="dt">int</span> counter<span class="op">,</span> <span class="dt">int</span> max_count<span class="op">)</span></span> 2647<span id="cb79-2"><a href="#cb79-2" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 2648<span id="cb79-3"><a href="#cb79-3" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>counter <span class="op">></span> max_count<span class="op">)</span></span> 2649<span id="cb79-4"><a href="#cb79-4" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> product<span class="op">;</span></span> 2650<span id="cb79-5"><a href="#cb79-5" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> fact_iter<span class="op">(</span>counter <span class="op">*</span> product<span class="op">,</span> counter <span class="op">+</span> <span class="dv">1</span><span class="op">,</span> max_count<span class="op">);</span></span> 2651<span id="cb79-6"><a href="#cb79-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span> 2652<span id="cb79-7"><a href="#cb79-7" aria-hidden="true" tabindex="-1"></a></span> 2653<span id="cb79-8"><a href="#cb79-8" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> factorial<span class="op">(</span><span class="dt">int</span> n<span class="op">)</span> <span class="op">{</span> <span class="cf">return</span> fact_iter<span class="op">(</span><span class="dv">1</span><span class="op">,</span> <span class="dv">1</span><span class="op">,</span> n<span class="op">);</span> <span class="op">}</span></span></code></pre></div> 2654<p>è¿èå¯ä»¥è½¬æ¢ä¸ºå¾ªç¯å®ç°ï¼</p> 2655<div class="sourceCode" id="cb80"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb80-1"><a href="#cb80-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> factorial<span class="op">(</span><span class="dt">int</span> n<span class="op">)</span></span> 2656<span id="cb80-2"><a href="#cb80-2" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 2657<span id="cb80-3"><a href="#cb80-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> product <span class="op">=</span> <span class="dv">1</span><span class="op">;</span></span> 2658<span id="cb80-4"><a href="#cb80-4" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> <span class="op">(</span><span class="dt">int</span> counter <span class="op">=</span> <span class="dv">1</span><span class="op">;</span> counter <span class="op"><=</span> n<span class="op">;</span> counter<span class="op">++)</span></span> 2659<span id="cb80-5"><a href="#cb80-5" aria-hidden="true" tabindex="-1"></a> product <span class="op">*=</span> counter<span class="op">;</span></span> 2660<span id="cb80-6"><a href="#cb80-6" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> product<span class="op">;</span></span> 2661<span id="cb80-7"><a href="#cb80-7" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 2662<p>è¿å°±é¿å äºéå½è°ç¨å½æ°äº§ççèµæºæµªè´¹ã</p> 2663<h3 id="å¸¸è§æ®µé误åå ">5.6 å¸¸è§æ®µé误åå </h3> 2664<ol type="1"> 2665<li><p>访é®ç©ºæé</p> 2666<div class="sourceCode" id="cb81"><pre 2667class="sourceCode c"><code class="sourceCode c"><span id="cb81-1"><a href="#cb81-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="op">*</span>p <span class="op">=</span> NULL<span class="op">;</span></span> 2668<span id="cb81-2"><a href="#cb81-2" aria-hidden="true" tabindex="-1"></a><span class="op">*</span>p <span class="op">=</span> <span class="dv">10</span><span class="op">;</span> <span class="co">// 段é误</span></span></code></pre></div></li> 2669<li><p>ä½¿ç¨æªåå§åçæé</p> 2670<div class="sourceCode" id="cb82"><pre 2671class="sourceCode c"><code class="sourceCode c"><span id="cb82-1"><a href="#cb82-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="op">*</span>p<span class="op">;</span></span> 2672<span id="cb82-2"><a href="#cb82-2" aria-hidden="true" tabindex="-1"></a><span class="op">*</span>p <span class="op">=</span> <span class="dv">5</span><span class="op">;</span> <span class="co">// p æåéæºå°åï¼åå ¥ä¼å´©æº</span></span></code></pre></div></li> 2673<li><p>访é®å·²éæ¾çå å</p> 2674<div class="sourceCode" id="cb83"><pre 2675class="sourceCode c"><code class="sourceCode c"><span id="cb83-1"><a href="#cb83-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> <span class="op">*</span>p <span class="op">=</span> malloc<span class="op">(</span><span class="kw">sizeof</span><span class="op">(</span><span class="dt">int</span><span class="op">));</span></span> 2676<span id="cb83-2"><a href="#cb83-2" aria-hidden="true" tabindex="-1"></a>free<span class="op">(</span>p<span class="op">);</span></span> 2677<span id="cb83-3"><a href="#cb83-3" aria-hidden="true" tabindex="-1"></a><span class="op">*</span>p <span class="op">=</span> <span class="dv">10</span><span class="op">;</span> <span class="co">// å±é©ï¼å¯è½å¯¼è´æ®µéè¯¯ææªå®ä¹è¡ä¸º</span></span></code></pre></div></li> 2678<li><p>æ°ç»è¶ç访é®</p> 2679<div class="sourceCode" id="cb84"><pre 2680class="sourceCode c"><code class="sourceCode c"><span id="cb84-1"><a href="#cb84-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> arr<span class="op">[</span><span class="dv">5</span><span class="op">];
2680</span></span> 2681<span id="cb84-2"><a href="#cb84-2" aria-hidden="true" tabindex="-1"></a>arr<span class="op">[</span><span class="dv">10</span><span class="op">]</span> <span class="op">=</span> <span class="dv">1</span><span class="op">;</span> <span class="co">// è¶çåå ¥ï¼å¯è½ç ´åæ æè§¦åä¿æ¤æºå¶</span></span></code></pre></div></li> 2682<li><p>æ æº¢åº</p> 2683<ul> 2684<li>éå½è¿æ·±æå±é¨åéè¿å¤§ï¼å¦å¤§æ°ç»ï¼<br /> 2685</li> 2686</ul> 2687<div class="sourceCode" id="cb85"><pre 2688class="sourceCode c"><code class="sourceCode c"><span id="cb85-1"><a href="#cb85-1" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> f<span class="op">()</span> <span class="op">{</span> f<span class="op">();</span> <span class="op">}</span> <span class="co">// æ ééå½ â æ æº¢åº â å¯è½æ®µé误</span></span></code></pre></div></li> 2689<li><p>ä¿®æ¹å符串åé¢éï¼å¸¸éåºåå ¥ï¼</p> 2690<div class="sourceCode" id="cb86"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb86-1"><a href="#cb86-1" aria-hidden="true" tabindex="-1"></a><span class="dt">char</span> <span class="op">*</span>s <span class="op">=</span> <span class="st">"hello"</span><span class="op">;</span></span> 2691<span id="cb86-2"><a href="#cb86-2" aria-hidden="true" tabindex="-1"></a>s<span class="op">[</span><span class="dv">0</span><span class="op">]</span> <span class="op">=</span> <span class="ch">'H'</span><span class="op">;</span> <span class="co">// å°è¯ä¿®æ¹åªè¯»å å â æ®µé误</span></span></code></pre></div> 2692<p>æ£ç¡®åæ³ï¼<code>char s[] = "hello";</code></p></li> 2693<li><p>彿°æéé误æè°ç¨çº¦å®ä¸å¹é </p> 2694<ul> 2695<li>è°ç¨éæ³å½æ°æéï¼å¦æªèµå¼æç±»åé误ï¼</li> 2696</ul></li> 2697</ol> 2698<h3 id="å½ä»¤è¡åæ°å¤ç">5.7 å½ä»¤è¡åæ°å¤ç</h3> 2699<p>å设æå为 <code>repeat.c</code> çå¦ä¸ç¨åºï¼</p> 2700<div class="sourceCode" id="cb87"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb87-1"><a href="#cb87-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 2701<span id="cb87-2"><a href="#cb87-2" aria-hidden="true" tabindex="-1"></a></span> 2702<span id="cb87-3"><a href="#cb87-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">(</span><span class="dt">int</span> argc<span class="op">,</span> <span class="dt">char</span><span class="op">*</span> argv<span class="op">[])</span></span> 2703<span id="cb87-4"><a href="#cb87-4" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 2704<span id="cb87-5"><a href="#cb87-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> count<span class="op">;</span></span> 2705<span id="cb87-6"><a href="#cb87-6" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"The command line has </span><span class="sc">%d</span><span class="st"> arguments:</span><span class="sc">\n</span><span class="st">"</span><span class="op">,</span> argc <span class="op">-</span> <span class="dv">1</span><span class="op">);</span></span> 2706<span id="cb87-7"><a href="#cb87-7" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> <span class="op">(</span>count <span class="op">=</span> <span class="dv">1</span><span class="op">;</span> count <span class="op"><</span> argc<span class="op">;</span> count<span class="op">++)</span></span> 2707<span id="cb87-8"><a href="#cb87-8" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%d</span><span class="st">: </span><span class="sc">%s\n</span><span class="st">"</span><span class="op">,</span> count<span class="op">,</span> argv<span class="op">[</span>count<span class="op">]);</span></span> 2708<span id="cb87-9"><a href="#cb87-9" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span> 2709<span id="cb87-10"><a href="#cb87-10" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 2710<span id="cb87-11"><a href="#cb87-11" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 2711<p>æè¯¥ç¨åºç¼è¯ä¸ºå¯æ§è¡æä»¶ <code>repeat</code>ã</p> 2712<p>éè¿å½ä»¤è¡è°ç¨å¯æ§è¡æä»¶ï¼</p> 2713<div class="sourceCode" id="cb88"><pre 2714class="sourceCode sh"><code class="sourceCode bash"><span id="cb88-1"><a href="#cb88-1" aria-hidden="true" tabindex="-1"></a><span class="ex">repeat</span> Resistance is futile</span></code></pre></div> 2715<p>ç¨åºè¾åºï¼</p> 2716<pre><code>The command line has 3 arguments: 27171: Resistance 27182: is
27193: futile</code></pre> 2720<p>C ç¼è¯å¨å 许 <code>main()</code> 没æåæ°æè æä¸¤ä¸ªåæ°ï¼ä¸äºå®ç°å 许 2721<code>main()</code> ææ´å¤åæ°ï¼å±äºå¯¹æ åçæ©å±ï¼ã<code>main()</code> 2722æä¸¤ä¸ªåæ°æ¶ï¼ç¬¬ 1 ä¸ªåæ°æ¯å½ä»¤è¡ä¸çå符串æ°éãè¿å»ï¼è¿ä¸ª 2723<code>int</code> ç±»åçåæ°è¢«ç§°ä¸º 2724<code>argc</code>ï¼è¡¨ç¤ºåæ°è®¡æ°ï¼argument 2725countï¼ï¼ãç³»ç»ç¨ç©ºæ ¼è¡¨ç¤ºä¸ä¸ªå符串çç»æåä¸ä¸ä¸ªå符串çå¼å§ãå æ¤ï¼ä¸é¢ç 2726<code>repeat</code> 示ä¾ä¸å æ¬å½ä»¤åå ±æ 4 个å符串ï¼å ¶ä¸å 3 ä¸ªä¾ 2727<code>repeat</code> 2728使ç¨ã该ç¨åºæå½ä»¤è¡å符串å¨åå¨å åä¸ï¼å¹¶ææ¯ä¸ªå符串çå°åå¨å卿鿰ç»ä¸ãè该æ°ç»çå°åå被å¨åå¨ 2729<code>main()</code> ç第 2 ä¸ªåæ°ä¸ãæç §æ¯ä¾ï¼è¿ä¸ªæåæéçæé称为 2730<code>argv</code>ï¼è¡¨ç¤ºåæ°å¼ï¼argument 2731valueï¼ï¼ãå¦æç³»ç»å 许ï¼ä¸äºæä½ç³»ç»ä¸å è®¸è¿æ ·ï¼ï¼å°±æç¨åºæ¬èº«çåç§°èµç» 2732<code>argv[0]</code>ï¼ç¶åæéåç第 1 个å符串èµç» 2733<code>argv[1]</code>ï¼ä»¥æ¤ç±»æ¨ã卿们çä¾åä¸ï¼æä¸é¢çå ³ç³»ï¼</p> 2734<ul> 2735<li><code>argv[0]</code> æå 2736<code>repeat</code>ï¼å¯¹å¤§é¨åç³»ç»èè¨ï¼</li> 2737<li><code>argv[1]</code> æå <code>Resistance</code></li> 2738<li><code>argv[2]</code> æå <code>is</code></li> 2739<li><code>argv[3]</code> æå <code>futile</code></li> 2740</ul> 2741<p><code>main()</code> 2742ä¸çå½¢åå½¢å¼ä¸å ¶ä»å¸¦å½¢åç彿°ç¸åãå¯ä»¥çä»·å°ç¨ä»¥ä¸å½¢å¼å£°æ 2743<code>argv</code>ï¼</p> 2744<div class="sourceCode" id="cb90"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb90-1"><a href="#cb90-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">(</span><span class="dt">int</span> argc<span class="op">,</span> <span class="dt">char</span> <span class="op">**</span>argv<span class="op">)</span></span></code></pre></div> 2745<p>许å¤ç¯å¢é½å 许ç¨åå¼å·æå¤ä¸ªåè¯æ¬èµ·æ¥å½¢æä¸ä¸ªåæ°ãä¾å¦ï¼</p> 2746<div class="sourceCode" id="cb91"><pre 2747class="sourceCode sh"><code class="sourceCode bash"><span id="cb91-1"><a href="#cb91-1" aria-hidden="true" tabindex="-1"></a><span class="ex">repeat</span> <span class="st">"I am hungry"</span> now</span></code></pre></div> 2748<p>è¿è¡å½ä»¤æå符串 <code>"I am hungry"</code> èµç» 2749<code>argv[1]</code>ï¼æ <code>"now"</code> èµç» 2750<code>argv[2]</code>ã</p> 2751<h2 id="å°ä¼è¯æ³">6 å°ä¼è¯æ³</h2> 2752<h3 id="å°ç¨-switch-è¯å¥">6.1 å°ç¨ <code>switch</code> è¯å¥</h3> 2753<ol type="1"> 2754<li><p>åºæ¬ç»æï¼</p> 2755<div class="sourceCode" id="cb92"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb92-1"><a href="#cb92-1" aria-hidden="true" tabindex="-1"></a><span class="cf">switch</span> <span class="op">(</span>表达å¼<span class="op">)</span> <span class="op">{</span></span> 2756<span id="cb92-2"><a href="#cb92-2" aria-hidden="true" tabindex="-1"></a> <span class="cf">case</span> 常é<span class="dv">1</span><span class="op">:</span> è¯å¥<span class="op">;</span> <span class="cf">break</span><span class="op">;</span></span> 2757<span id="cb92-3"><a href="#cb92-3" aria-hidden="true" tabindex="-1"></a> <span class="cf">case</span> 常é<span class="dv">2</span><span class="op">:</span> è¯å¥<span class="op">;</span> <span class="cf">break</span><span class="op">;</span></span> 2758<span id="cb92-4"><a href="#cb92-4" aria-hidden="true" tabindex="-1"></a> <span class="cf">default</span><span class="op">:</span> è¯å¥<span class="op">;</span></span> 2759<span id="cb92-5"><a href="#cb92-5" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 2760<ul> 2761<li>表达å¼å¿ é¡»æ¯<strong>æ´åæå符å</strong>ï¼char æ¬è´¨æ¯æ´æ°ï¼ã</li> 2762<li>case 2763æ ç¾å¿ é¡»æ¯<strong>ç¼è¯æ¶å¸¸é</strong>ï¼å¦åé¢éã<code>const</code> 2764åé卿äºç¼è¯å¨ä¸ä¹ä¸è¡ï¼æ ååªå 许æ´å常é表达å¼ï¼ã</li> 2765</ul></li> 2766<li><p>Fall-throughï¼ç©¿éï¼ï¼</p> 2767<ul> 2768<li>妿ä¸ä¸ª <code>case</code> åæ«å°¾æ²¡æ 2769<code>break</code>
2769ï¼ç¨åºä¼ç»§ç»æ§è¡ä¸ä¸ä¸ª <code>case</code> 2770ç代ç ï¼ç´å°éå° <code>break</code> æ <code>switch</code> ç»æã</li> 2771<li>示ä¾ä¸é项 3 没æ <code>break</code>ï¼æä»¥é 3 æ¶ä¹ä¼æ§è¡ 2772<code>case 4</code> çå 容ã</li> 2773</ul></li> 2774<li><p>å¤ä¸ª case å ±äº«ä»£ç ï¼</p> 2775<ul> 2776<li>å¦ <code>'A'</code> å <code>'a'</code> 2777å ±äº«å䏿®µå¤çé»è¾ï¼åªé卿åä¸ä¸ªå <code>break</code>ã</li> 2778</ul></li> 2779<li><p>default 忝ï¼</p> 2780<ul> 2781<li>彿æ <code>case</code> 2782é½ä¸å¹é æ¶æ§è¡ï¼å¯æ¾å¨ä»»æä½ç½®ï¼ä½ä¹ æ¯æ¾å¨æåï¼ã</li> 2783</ul></li> 2784</ol> 2785<blockquote> 2786<p>注æï¼<code>switch</code> ä¸è½ç¨æµ®ç¹æ°ãå符串æåéä½ä¸º case 2787æ ç¾ã</p> 2788</blockquote> 2789<p>C è¯è¨ç <code>switch</code> 2790è¯å¥æ¬è´¨ä¸æ¯<strong>æ ç¾è·³è½¬</strong>èéå¤è·¯åæ¯ãå æ¤ç¸è¾äºå ¶ä»è¯è¨ï¼æ¯å¦ 2791Pythonï¼ï¼å®çè¯æ³å¹¶ä¸ç´è§ï¼éç¨çç±»åååæéï¼èä¸å ä¹å¨æææ åµä¸é½å¯ä»¥è¢« 2792<code>if else</code> çä»·æ¿ä»£ã尽管 <code>switch</code> 2793è¯å¥å¨æ§è½ä¸æå°è®¸ä¼å¿ï¼ä½å¤§å¤æ°æ åµä¸ä»åºéç¨å ¶ä»åæ¯æ§å¶è¯å¥ã</p> 2794<h3 id="å«ç¨-goto-è¯å¥">6.2 å«ç¨ <code>goto</code> è¯å¥</h3> 2795<p><code>goto</code> è¯å¥æ¯ C 2796è¯è¨ä¸çä¸ç§æ æ¡ä»¶è·³è½¬è¯å¥ï¼å ¶åºæ¬å½¢å¼ä¸ºï¼</p> 2797<div class="sourceCode" id="cb93"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb93-1"><a href="#cb93-1" aria-hidden="true" tabindex="-1"></a><span class="cf">goto</span> æ å·<span class="op">;</span></span> 2798<span id="cb93-2"><a href="#cb93-2" aria-hidden="true" tabindex="-1"></a><span class="op">...</span></span> 2799<span id="cb93-3"><a href="#cb93-3" aria-hidden="true" tabindex="-1"></a>æ å·<span class="op">:</span> è¯å¥<span class="op">;</span></span></code></pre></div> 2800<p>ä¾å¦ï¼</p> 2801<div class="sourceCode" id="cb94"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb94-1"><a href="#cb94-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 2802<span id="cb94-2"><a href="#cb94-2" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span> 2803<span id="cb94-3"><a href="#cb94-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> i <span class="op">=</span> <span class="dv">0</span><span class="op">;</span></span> 2804<span id="cb94-4"><a href="#cb94-4" aria-hidden="true" tabindex="-1"></a> loop<span class="op">:</span></span> 2805<span id="cb94-5"><a href="#cb94-5" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%d</span><span class="st"> "</span><span class="op">,</span> i<span class="op">);</span></span> 2806<span id="cb94-6"><a href="#cb94-6" aria-hidden="true" tabindex="-1"></a> i<span class="op">++;</span></span> 2807<span id="cb94-7"><a href="#cb94-7" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>i <span class="op"><</span> <span class="dv">5</span><span class="op">)</span> <span class="cf">goto</span> loop<span class="op">;</span></span> 2808<span id="cb94-8"><a href="#cb94-8" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 2809<span id="cb94-9"><a href="#cb94-9" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 2810<p>è¿æ®µä»£ç ä¼è¾åº <code>0 1 2 3 4</code>ã</p> 2811<p><img src="/img/cdetails/goto.jpg" style="zoom:80%;" /></p> 2812<p><strong>为ä½åºé¿å ä½¿ç¨ <code>goto</code>ï¼</strong></p> 2813<ol type="1"> 2814<li><code>goto</code> 2815å¯ä»¥ä»»æè·³è½¬å°å½æ°å ç任使 ç¾å¤ï¼æç ´é¡ºåºãéæ©ã循ç¯çç»æåç¼ç¨çåºæ¬æ§å¶æµï¼ä½¿ä»£ç é»è¾æ··ä¹±ã</li> 2816<li>é è¯»ä»£ç æ¶é¾ä»¥è¿½è¸ªæ§è¡è·¯å¾ï¼âæå¤§å©é¢æ¡å¼ä»£ç âï¼ï¼å¢å çè§£åè°è¯é¾åº¦ã</li> 2817<li>è·³è¿åéåå§åãèµæºåé ææ¸ ç代ç ï¼å¯è½å¯¼è´æªå®ä¹è¡ä¸ºæå åæ³æ¼ã</li> 2818<li>å 乿æ <code>goto</code> çç¨éï¼å¦è·³åºå¤å±å¾ªç¯ãé误å¤çï¼é½å¯ç¨ 2819<code>break</code>ã<code>continue</code>ã彿°å°è£ ãç¶æåéæå¼å¸¸æºå¶ï¼å¨æ¯æçè¯è¨ä¸ï¼æ´å®å ¨ãæ¸ æ°å°å®ç°ã</li> 2820</ol> 2821<h3 id="å®ä¸å®ç¼ç¨">6.3 å®ä¸å®ç¼ç¨</h3> 2822<h4 id="åæ°å®">6.3.1 åæ°å®</h4> 2823<p>å¨ <code>#define</code> 2824ä¸ä½¿ç¨åæ°å¯ä»¥å建å¤å½¢åä½ç¨ä¸å½æ°ç±»ä¼¼çç±»å½æ°å®ã带æåæ°çå®çä¸å»å¾å彿°ï¼å ä¸ºè¿æ ·çå®ä¹ä½¿ç¨åæ¬å·ãç±»å½æ°å®å®ä¹ç忬å·ä¸å¯ä»¥æä¸ä¸ªæå¤ä¸ªåæ°ï¼éåè¿äºåæ°åºç°å¨æ¿æ¢ä½ä¸ï¼å¦ä¸å¾æç¤ºã</p> 2825<p><img src="/img/cdetails/macro.png" style="zoom:100%;" /></p> 2826<p>ä¸é¢æ¯ä¸ä¸ªç±»å½æ°å®ç示ä¾ï¼</p> 2827<div class="sourceCode" id="cb95"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb95-1"><a href="#cb95-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 2828<span id="cb95-2"><a href="#cb95-2" aria-hidden="true" tabindex="-1"></a></span> 2829<span id="cb95-3"><a href="#cb95-3" aria-hidden="true" tabindex="-1"></a><span class="pp">#define SQUARE</span><span class="op">(</span><span class="pp">X</span><span class="op">)</span><span class="pp"> X</span><span class="op">*</span><span class="pp"> X</span></span> 2830<span id="cb95-4"><a href="#cb95-4" aria-hidden="true" tabindex="-1"></a><span class="pp">#define PR</span><span class="op">(</span><span class="pp">X</span><span class="op">)</span><span class="pp"> printf</span><span class="op">(</span><span class="st">"The result is </span><span class="sc">%d</span><span class="st">.</span><span class="sc">\n</span><span class="st">"</span><span class="op">,</span><span class="pp"> X</span><span class="op">)</span></span> 2831<span id="cb95-5"><a href="#cb95-5" aria-hidden="true" tabindex="-1"></a></span> 2832<span id="cb95-6"><a href="#cb95-6" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">(</span><span class="dt">void</span><span class="op">)</span></span> 2833<span id="cb95-7"><a href="#cb95-7" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 2834<span id="cb95-8"><a href="#cb95-8" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> x <span class="op">=</span> <span class="dv">5</span><span class="op">;</span></span> 2835<span id="cb95-9"><a href="#cb95-9" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> z<span class="op">;</span></span> 2836<span id="cb95-10"><a href="#cb95-10" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"
2836x = </span><span class="sc">%d\n</span><span class="st">"</span><span class="op">,</span> x<span class="op">);</span></span> 2837<span id="cb95-11"><a href="#cb95-11" aria-hidden="true" tabindex="-1"></a> z <span class="op">=</span> SQUARE<span class="op">(</span>x<span class="op">);</span></span> 2838<span id="cb95-12"><a href="#cb95-12" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"Evaluating SQUARE(x): "</span><span class="op">);</span></span> 2839<span id="cb95-13"><a href="#cb95-13" aria-hidden="true" tabindex="-1"></a> PR<span class="op">(</span>z<span class="op">);</span></span> 2840<span id="cb95-14"><a href="#cb95-14" aria-hidden="true" tabindex="-1"></a> z <span class="op">=</span> SQUARE<span class="op">(</span><span class="dv">2</span><span class="op">);</span></span> 2841<span id="cb95-15"><a href="#cb95-15" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"Evaluating SQUARE(2): "</span><span class="op">);</span></span> 2842<span id="cb95-16"><a href="#cb95-16" aria-hidden="true" tabindex="-1"></a> PR<span class="op">(</span>z<span class="op">);</span></span> 2843<span id="cb95-17"><a href="#cb95-17" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"Evaluating SQUARE(x+2): "</span><span class="op">);</span></span> 2844<span id="cb95-18"><a href="#cb95-18" aria-hidden="true" tabindex="-1"></a> PR<span class="op">(</span>SQUARE<span class="op">(</span>x <span class="op">+</span> <span class="dv">2</span><span class="op">));</span></span> 2845<span id="cb95-19"><a href="#cb95-19" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"Evaluating 100/SQUARE(2): "</span><span class="op">);</span></span> 2846<span id="cb95-20"><a href="#cb95-20" aria-hidden="true" tabindex="-1"></a> PR<span class="op">(</span><span class="dv">100</span> <span class="op">/</span> SQUARE<span class="op">(</span><span class="dv">2</span><span class="op">));</span></span> 2847<span id="cb95-21"><a href="#cb95-21" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"x is </span><span class="sc">%d</span><span class="st">.</span><span class="sc">\n</span><span class="st">"</span><span class="op">,</span> x<span class="op">);</span></span> 2848<span id="cb95-22"><a href="#cb95-22" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"Evaluating SQUARE(++x): "</span><span class="op">);</span></span> 2849<span id="cb95-23"><a href="#cb95-23" aria-hidden="true" tabindex="-1"></a> PR<span class="op">(</span>SQUARE<span class="op">(++</span>x<span class="op">));</span></span> 2850<span id="cb95-24"><a href="#cb95-24" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"After incrementing, x is </span><span class="sc">%x</span><span class="st">.</span><span class="sc">\n</span><span class="st">"</span><span class="op">,</span> x<span class="op">);</span></span> 2851<span id="cb95-25"><a href="#cb95-25" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 2852<span id="cb95-26"><a href="#cb95-26" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 2853<p>SQUAREå®çå®ä¹å¦ä¸ï¼</p> 2854<div class="sourceCode" id="cb96"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb96-1"><a href="#cb96-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define SQUARE</span><span class="op">(</span><span class="pp">X</span><span class="op">)</span><span class="pp"> X</span><span class="op">*</span><span class="pp">X</span></span></code></pre></div> 2855<p>è¿éï¼<code>SQUARE</code> æ¯å®æ è¯ç¬¦ï¼<code>SQUARE(X)</code> ä¸ç 2856<code>X</code> æ¯å®åæ°ï¼<code>X*X</code> æ¯æ¿æ¢å表ãç¨åºåºç° 2857<code>SQUARE(X)</code> çå°æ¹é½ä¼è¢« <code>X*X</code> 2858æ¿æ¢ã使ç¨è¯¥å®æ¶ï¼æ¢å¯ä»¥ç¨ <code>X</code>ï¼ä¹å¯ä»¥ç¨å ¶ä»ç¬¦å·ãå®å®ä¹ä¸ç 2859<code>X</code> ç±å®è°ç¨ä¸ç符å·ä»£æ¿ãå æ¤ï¼<code>SQUARE(2)</code> æ¿æ¢ä¸º 2860<code>2*2</code>ï¼<code>X</code> å®é ä¸èµ·å°åæ°çä½ç¨ã</p> 2861<p>ç¶èï¼å®åæ°ä¸å½æ°åæ°ä¸å®å ¨ç¸åãä¸é¢æ¯ç¨åºçè¾åºï¼æ³¨ææäºå 容å¯è½ä¸æä»¬ç颿ä¸ç¬¦ï¼</p> 2862<pre><code>x = 5 2863Evaluating SQUARE(x): The result is 25. 2864Evaluating SQUARE(2): The result is 4. 2865Evaluating SQUARE(x+2): The result is 17. 2866Evaluating 100/SQUARE(2): The result is 100. 2867x is 5. 2868Evaluating SQUARE(++x): The result is 49. 2869After incrementing, x is 7.</code></pre> 2870<p>ç¨åºä¸è®¾ç½® <code>x</code> çå¼ä¸º <code>5</code>ï¼ä½ 2871<code>SQUARE(x+2)</code> è¾åºçç»ææ¯ 2872<code>17</code>ã导è´è¿æ ·ç»æçåå æ¯é¢å¤çå¨ä¸å计ç®ã䏿±å¼ï¼åªæ¿æ¢å符åºåãé¢å¤ç卿åºç°xçå°æ¹é½æ¿æ¢æ 2873<code>x+2</code>ãå æ¤ï¼<code>x*x</code> åæäº 2874<code>x+2*x+2</code>ã妿 <code>x</code> 为 2875<code>5</code>ï¼é£ä¹è¯¥è¡¨è¾¾å¼çå¼ä¸º <code>17</code>ã</p> 2876<p>
2876è¯¥ä¾æ¼ç¤ºäºå½æ°è°ç¨åå®è°ç¨çéè¦åºå«ã彿°è°ç¨å¨ç¨åºè¿è¡æ¶æåæ°çå¼ä¼ éç»å½æ°ãå®è°ç¨å¨ç¼è¯ä¹åæåæ°è®°å·ä¼ éç»ç¨åºãè¿ä¸¤ä¸ªä¸åçè¿ç¨åçå¨ä¸åæ¶æãæ¯å¦å¯ä»¥ä¿®æ¹å®å®ä¹è®© 2877<code>SQUARE(x+2)</code> å¾ 2878<code>49</code>ï¼å½ç¶å¯ä»¥ï¼è¦å¤å å ä¸ªåæ¬å·ï¼</p> 2879<div class="sourceCode" id="cb98"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb98-1"><a href="#cb98-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define SQUARE</span><span class="op">(</span><span class="pp">x</span><span class="op">)</span><span class="pp"> </span><span class="op">(</span><span class="pp">x</span><span class="op">)*(</span><span class="pp">x</span><span class="op">)</span></span></code></pre></div> 2880<p>使¯ï¼è¿å¹¶æªè§£å³ææçé®é¢ã<code>100/SQUARE(2)</code> è¢«æ¿æ¢ä¸º 2881<code>100/2*2</code>ï¼å¾å° <code>100</code>ãæ <code>SQUARE(x)</code> 2882å®ä¹ä¸ºä¸é¢çå½¢å¼å¯ä»¥è§£å³è¿ç§æ··ä¹±ï¼</p> 2883<div class="sourceCode" id="cb99"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb99-1"><a href="#cb99-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define SQUARE</span><span class="op">(</span><span class="pp">x</span><span class="op">)</span><span class="pp"> </span><span class="op">(</span><span class="pp">x</span><span class="op">*</span><span class="pp">x</span><span class="op">)</span></span></code></pre></div> 2884<p>è¦å¤çåé¢çä¸¤ç§æ åµï¼è¦è¿æ ·å®ä¹ï¼</p> 2885<div class="sourceCode" id="cb100"><pre 2886class="sourceCode c"><code class="sourceCode c"><span id="cb100-1"><a href="#cb100-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define SQUARE</span><span class="op">(</span><span class="pp">x</span><span class="op">)</span><span class="pp"> </span><span class="op">((</span><span class="pp">x</span><span class="op">)*(</span><span class="pp">x</span><span class="op">))</span></span></code></pre></div> 2887<p>å æ¤ï¼å¿ è¦æ¶è¦ä½¿ç¨è¶³å¤å¤ç忬巿¥ç¡®ä¿è¿ç®åç»åçæ£ç¡®é¡ºåºã</p> 2888<p>å°½ç®¡å¦æ¤ï¼è¿æ ·åè¿æ¯æ æ³é¿å ç¨åºä¸æåä¸ç§æ åµçé®é¢ã<code>SQUARE(++x)</code> 2889åæäº <code>++x*++x</code>ï¼éå¢äºä¸¤æ¬¡ 2890<code>x</code>ãç±äºæ åå¹¶æªå¯¹è¿ç±»è¿ç®è§å®é¡ºåºï¼æä»¥æäºç¼è¯å¨å¾ 2891<code>7*6</code>ãèæäºç¼è¯å¨å¯è½å¨ä¹æ³è¿ç®ä¹åå·²ç»éå¢äº 2892<code>x</code>ï¼æä»¥ <code>7*7</code> å¾ <code>49</code>ãå¨ C 2893æ åä¸ï¼å¯¹è¯¥è¡¨è¾¾å¼æ±å¼çè¿ç§æ åµç§°ä¸ºæªå®ä¹è¡ä¸ºãæ 论åªç§æ åµï¼<code>x</code> 2894çå¼å§å¼é½æ¯ <code>5</code>ï¼è½ç¶ä»ä»£ç ä¸çåªéå¢äºä¸æ¬¡ï¼ä½æ¯ 2895<code>x</code> çæç»å¼æ¯ <code>7</code>ã</p> 2896<p>è§£å³è¿ä¸ªé®é¢æç®åçæ¹æ³æ¯ï¼é¿å ç¨ <code>++x</code> 2897ä½ä¸ºå®åæ°ãä¸è¬èè¨ï¼ä¸è¦å¨å®ä¸ä½¿ç¨é墿éåè¿ç®ç¬¦ã使¯ï¼<code>++x</code> 2898å¯ä½ä¸ºå½æ°åæ°ï¼å 为ç¼è¯å¨ä¼å¯¹ <code>++x</code> æ±å¼å¾ <code>6</code> 2899åï¼åæ <code>6</code> ä¼ éç»å½æ°ã</p> 2900<h4 id="å-è¿ç®ç¬¦">6.3.2 <code>#</code> å <code>##</code> è¿ç®ç¬¦</h4> 2901<p><strong><code>#</code>ï¼å符串åè¿ç®ç¬¦ï¼ï¼</strong></p> 2902<p>ç¨äºå°å®åæ°è½¬æ¢ä¸ºå符串åé¢éï¼å³ç¨åå¼å·å å´ï¼ã</p> 2903<p>示ä¾ï¼</p> 2904<div class="sourceCode" id="cb101"><pre 2905class="sourceCode c"><code class="sourceCode c"><span id="cb101-1"><a href="#cb101-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define STR</span><span class="op">(</span><span class="pp">x</span><span class="op">)</span><span class="pp"> </span><span class="op">#</span><span class="pp">x</span></span> 2906<span id="cb101-2"><a href="#cb101-2" aria-hidden="true" tabindex="-1"></a>printf<span class="op">(</span><span class="st">"</span><span class="sc">%s\n</span><span class="st">"</span><span class="op">,</span> STR<span class="op">(</span>hello<span class="op">));</span> <span class="co">// è¾åº: helloï¼ä½ä¸ºå符串ï¼</span></span></code></pre></div> 2907<p><strong><code>##</code>ï¼è¿æ¥è¿ç®ç¬¦ / token pasteï¼ï¼</strong></p> 2908<p>ç¨äºå°ä¸¤ä¸ªæ è®°ï¼tokensï¼è¿æ¥æä¸ä¸ªåä¸çæ è®°ã</p> 2909<p>示ä¾ï¼</p> 2910<div class="sourceCode" id="cb102"><pre 2911class="sourceCode c"><code class="sourceCode c"><span id="cb102-1"><a href="#cb102-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#define CONCAT</span><span class="op">(</span><span class="pp">a</span><span class="op">,</span><span class="pp"> b</span><span class="op">)</span><span class="pp"> a</span><span class="op">##</span><span class="pp">b</span></span> 2912<span id="cb102-2"><a href="#cb102-2" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> CONCAT<span class="op">(</span>var<span class="op">,</span> <span class="dv">123</span><span class="op">);</span> <span class="co">
2912// çä»·äº int var123;</span></span></code></pre></div> 2913<h4 id="ååæ°å®">6.3.3 ååæ°å®</h4> 2914<p>å¨ C99 å以åçæ åä¸ï¼å¯ä»¥ä½¿ç¨ååæ°å®ï¼variadic macrosï¼ï¼éè¿ 2915<code>...</code> æ¥æ¶å¯åæ°éçåæ°ï¼å¹¶ç¨ <code>__VA_ARGS__</code> 2916å¨å®ä½ä¸å¼ç¨è¿äºåæ°ã</p> 2917<p>示ä¾ç¨åºï¼</p> 2918<div class="sourceCode" id="cb103"><pre 2919class="sourceCode c"><code class="sourceCode c"><span id="cb103-1"><a href="#cb103-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 2920<span id="cb103-2"><a href="#cb103-2" aria-hidden="true" tabindex="-1"></a></span> 2921<span id="cb103-3"><a href="#cb103-3" aria-hidden="true" tabindex="-1"></a><span class="pp">#define LOG</span><span class="op">(</span><span class="pp">fmt</span><span class="op">,</span><span class="pp"> </span><span class="op">...)</span><span class="pp"> </span><span class="op">\</span></span> 2922<span id="cb103-4"><a href="#cb103-4" aria-hidden="true" tabindex="-1"></a><span class="pp"> printf</span><span class="op">(</span><span class="st">"[</span><span class="sc">%s</span><span class="st">:</span><span class="sc">%d</span><span class="st">] "</span><span class="pp"> fmt </span><span class="st">"</span><span class="sc">\n</span><span class="st">"</span><span class="op">,</span><span class="pp"> __FILE__</span><span class="op">,</span><span class="pp"> __LINE__</span><span class="op">,</span><span class="pp"> </span><span class="op">##</span><span class="pp">__VA_ARGS__</span><span class="op">)</span></span> 2923<span id="cb103-5"><a href="#cb103-5" aria-hidden="true" tabindex="-1"></a></span> 2924<span id="cb103-6"><a href="#cb103-6" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 2925<span id="cb103-7"><a href="#cb103-7" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 2926<span id="cb103-8"><a href="#cb103-8" aria-hidden="true" tabindex="-1"></a> LOG<span class="op">(</span><span class="st">"Hello, world!"</span><span class="op">);</span></span> 2927<span id="cb103-9"><a href="#cb103-9" aria-hidden="true" tabindex="-1"></a> LOG<span class="op">(</span><span class="st">"Value: </span><span class="sc">%d</span><span class="st">, Name: </span><span class="sc">%s</span><span class="st">"</span><span class="op">,</span> <span class="dv">42</span><span class="op">,</span> <span class="st">"Alice"</span><span class="op">);</span></span> 2928<span id="cb103-10"><a href="#cb103-10" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 2929<span id="cb103-11"><a href="#cb103-11" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 2930<blockquote> 2931<ul> 2932<li><code>...</code> è¡¨ç¤ºå®æ¥åå¯ååæ°ã</li> 2933<li><code>__VA_ARGS__</code> ä»£è¡¨ä¼ éç» <code>...</code> 2934çææåæ°ã</li> 2935<li><code>##__VA_ARGS__</code> æ¯ GCC 2936æ©å±ï¼ç¨äºå¨æ²¡æé¢å¤åæ°æ¶å é¤åé¢å¤ä½çéå·ã</li> 2937<li><code>__FILE__</code> å <code>__LINE__</code> 2938æ¯é¢å®ä¹å®ï¼ä»¥å符串形å¼è¡¨ç¤ºå½åæä»¶ååè¡å·ã</li> 2939</ul> 2940</blockquote> 2941<p>è¾åºç¤ºä¾ï¼å设æä»¶å为 <code>example.c</code>ï¼ï¼</p> 2942<pre><code>[example.c:8] Hello, world! 2943[example.c:9] Value: 42, Name: Alice</code></pre> 2944<h3 id="ä½å段">6.4 ä½å段</h3> 2945<p>C 2946è¯è¨åºå«äºè®¸å¤é«çº§è¯è¨çç¹æ§ä¹ä¸æ¯è®¿é®æ´æ°ä¸åç¬ä½çè½åãè¯¥ç¹æ§é常æ¯ä¸ç¡¬ä»¶è®¾å¤åæä½ç³»ç»äº¤äºçå ³é®ãä½å段ï¼bit 2947fieldï¼æ¯ä¸ç§ç¹æ®çç»æä½æåï¼å®å 许以ä½ä¸ºå使¥æå®åéæå ç¨çåå¨ç©ºé´ã</p> 2948<p><strong>åºæ¬è¯æ³ï¼</strong></p> 2949<div class="sourceCode" id="cb105"><pre 2950class="sourceCode c"><code class="sourceCode c"><span id="cb105-1"><a href="#cb105-1" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> <span class="op">{</span></span> 2951<span id="cb105-2"><a href="#cb105-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">unsigned</span> <span class="dt">int</span> flag1 <span class="op">:</span> <span class="dv">1</span><span class="op">;</span> <span class="co">// å 1ä½</span></span> 2952<span id="cb105-3"><a href="#cb105-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">unsigned</span> <span class="dt">int</span> flag2 <span class="op">:</span> <span class="dv">1</span><span class="op">;</span> <span class="co">// å 1ä½</span></span> 2953<span id="cb105-4"><a href="#cb105-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">unsigned</span> <span class="dt">int</span> value <span class="op">:</span> <span class="dv">6</span><span class="op">;</span> <span class="co">// å 6ä½</span></span> 2954<span id="cb105-5"><a href="#cb105-5" aria-hidden="true" tabindex="-1"></a><span class="op">}</span> my_bits<span class="op">;</span></span></code></pre></div> 2955<p>ä¸è¿°å®ä¹ä¸ï¼<code>my_bits</code> æ¯ä¸ä¸ªç»æä½åéï¼æ»å ±å ç¨ 8 ä½ï¼å³ 29561 åèï¼ï¼å ¶ä¸ï¼ - <code>flag1</code> å <code>flag2</code> åå 1 2957ä½ï¼é常ç¨äºå¸å°æ å¿ï¼ - <code>value</code> å 6 ä½ï¼å¯è¡¨ç¤º 0~63 2958çæ´æ°å¼ã</p> 2959<p><strong>ç¹ç¹ï¼</strong></p> 2960<ul> 2961<li>ä½åæ®µå¿ é¡»æ¯æ´åç±»åï¼å¦ 2962<code>int</code>ã<code>unsigned int</code>ã<code>signed int</code>ï¼ææ¶ä¹æ¯æ 2963<code>_Bool</code>ï¼ï¼</li> 2964<li>ä½å®½ä¸è½è¶ è¿è¯¥ç±»åçæ»ä½æ°ï¼</li> 2965<li>ä½å段ä¸è½åå°åï¼å³ä¸è½å¯¹ä½åæ®µä½¿ç¨ <code>&</code> 2966è¿ç®ç¬¦ï¼ï¼</li> 2967<li>ä½å段çå åå¸å±ï¼å¦é«ä½å¨åè¿æ¯ä½ä½å¨åï¼ä¸ç¼è¯å¨åå¹³å°ç¸å ³ï¼ä¸å ·æå¯ç§»æ¤æ§ï¼</li> 2968<li>å¯ç¨ä¸ä¸ªå®½åº¦ä¸º 0 çä½å段ï¼å¦ 2969<code>:0</code>ï¼å¼ºå¶å¯¹é½å°ä¸ä¸ä¸ªåå¨åå è¾¹çã</li> 2970</ul> 2971<p><strong>示ä¾ç¨åºï¼</strong></p> 2972<div class="sourceCode" id="cb106"><pre 2973class="sourceCode c"><code class="sourceCode c"><span id="cb106-1"><a href="#cb106-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span> 2974<span id="cb106-2"><a href="#cb106-2" aria-hidden="true" tabindex="-1"></a></span> 2975<span id="cb106-3"><a href="#cb106-3" aria-hidden="true" tabindex="-1"></a><span class="kw">
2975struct</span> Status <span class="op">{</span></span> 2976<span id="cb106-4"><a href="#cb106-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">unsigned</span> <span class="dt">int</span> is_ready <span class="op">:</span> <span class="dv">1</span><span class="op">;</span></span> 2977<span id="cb106-5"><a href="#cb106-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">unsigned</span> <span class="dt">int</span> is_valid <span class="op">:</span> <span class="dv">1</span><span class="op">;</span></span> 2978<span id="cb106-6"><a href="#cb106-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">unsigned</span> <span class="dt">int</span> error_code <span class="op">:</span> <span class="dv">4</span><span class="op">;</span></span> 2979<span id="cb106-7"><a href="#cb106-7" aria-hidden="true" tabindex="-1"></a><span class="op">};</span></span> 2980<span id="cb106-8"><a href="#cb106-8" aria-hidden="true" tabindex="-1"></a></span> 2981<span id="cb106-9"><a href="#cb106-9" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span> 2982<span id="cb106-10"><a href="#cb106-10" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span> 2983<span id="cb106-11"><a href="#cb106-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">struct</span> Status s <span class="op">=</span> <span class="op">{</span><span class="dv">1</span><span class="op">,</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">12</span><span class="op">};</span></span> 2984<span id="cb106-12"><a href="#cb106-12" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"is_ready: </span><span class="sc">%u\n</span><span class="st">"</span><span class="op">,</span> s<span class="op">.</span>is_ready<span class="op">);</span> <span class="co">// è¾åº 1</span></span> 2985<span id="cb106-13"><a href="#cb106-13" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"error_code: </span><span class="sc">%u\n</span><span class="st">"</span><span class="op">,</span> s<span class="op">.</span>error_code<span class="op">);</span> <span class="co">// è¾åº 12</span></span> 2986<span id="cb106-14"><a href="#cb106-14" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span> 2987<span id="cb106-15"><a href="#cb106-15" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div> 2988 2989 </div> 2990 2991 <!-- ååæç« --> 2992 2993 <div class="mt-3 py-2 rounded bg-light-subtle shadow-sm align-self-end"> 2994 <div class="row"> 2995 <div class="col-6 border-end border-2"> 2996 2997 </div> 2998 <div class="col-6 border-start border-2"> 2999 3000 <div class="fs-4 fw-light px-2 post-next"> 3001 <a href="/posts/52db781ce079/" class="link-secondary link-underline-opacity-0"> 3002 <div class="d-flex justify-content-between"> 3003 <span></span> 3004 <span class="text-truncate">SICP ç¥è¯ç¹æ¾é</span> 3005 <i class="bi bi-chevron-double-right"></i> 3006 </div> 3007 </a> 3008 </div> 3009 3010 </div> 3011 </div> 3012 </div> 3013 3014 </div> 3015</div> 3016 </div> 3017 3018 <div class="d-none d-md-block"> 3019 <div style="position:fixed; top: 50%; right: 1em;"> 3020 <div class="mb-2"> 3021 <button type="button" class="btn btn-outline-primary" id="theme-toggle-button" title="忢ææä¸»é¢"> 3022 <i id="theme-toggle-icon" class="bi bi-sun"></i> 3023 </button> 3024 </div> 3025 <div class="mb-2"> 3026 <button type="button" class="btn btn-outline-primary" id="waifu-toggle" title="åæ¢çæ¿å¨"> 3027 <i class="bi bi-heart"></i> 3028 </button> 3029 </div> 3030 <div class="mb-2"> 3031 <button class="btn btn-outline-primary" id="totop" title="åå°é¡¶é¨"> 3032 <i class="bi bi-chevron-bar-up"></i> 3033 </button> 3034 </div> 3035
3036<script src="/js/totop.js"></script>
3036 3037 3038</div> 3039 </div> 3040 3041 <div class="d-none d-md-block"> 3042 <div id="waifu"> 3043 <div id="waifu-tips" class="border rounded text-center bg-light-subtle shadow lead opacity-75"> 3044 </div> 3045 <div id="waifu-canvas"> 3046 <canvas id="live2d" width="800" height="800"></canvas> 3047 </div> 3048</div> 3049 </div> 3050 3051 <div class="mt-auto"> 3052 <footer class="row py-3 mt-4 border-top bg-light-subtle"> 3053 <ul class="nav col-md-6 justify-content-center"> 3054 <li class="nav-item"><a href="#" class="nav-link px-2 text-muted"><i class="bi bi-c-circle"></i> 2024~2025 L_Onion. All rights reserved.</a></li> 3055 </ul> 3056 3057 <ul class="nav col-md-6 justify-content-center"> 3058 <li class="nav-item"><a href="/" class="nav-link px-2 text-muted">主页</a></li> 3059 <li class="nav-item"><a href="" class="nav-link px-2 text-muted">GitHub</a></li> 3060 <li class="nav-item"><a target="_blank" rel="noopener" href="https://github.com/LOnion1124/hexo-onion" class="nav-link px-2 text-muted">Onion</a></li> 3061 <li class="nav-item"><a href="#" class="nav-link px-2 text-muted">FAQs</a></li> 3062 <li class="nav-item"><a href="/about" class="nav-link px-2 text-muted">å ³äº</a></li> 3063 </ul> 3064</footer> 3065 </div> 3066 </div> 3067</body> 3068 3069</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.