<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Snacks - pointer</title>
    <subtitle>Snack-size learning for a fast-paced world.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://snacks.devtestonly.uk/tags/pointer/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://snacks.devtestonly.uk"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-09-28T04:05:59+00:00</updated>
    <id>https://snacks.devtestonly.uk/tags/pointer/atom.xml</id>
    <entry xml:lang="en">
        <title>Modern C: Pointers</title>
        <published>2026-09-28T04:05:59+00:00</published>
        <updated>2026-09-28T04:05:59+00:00</updated>
        
        <author>
          <name>someone</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://snacks.devtestonly.uk/c/pointers/"/>
        <id>https://snacks.devtestonly.uk/c/pointers/</id>
        
        <content type="html" xml:base="https://snacks.devtestonly.uk/c/pointers/">&lt;p&gt;Pointers are a crucial C feature that allow access to objects from different points in code and enable dynamic data structures. They break the barrier of pure functions, allowing functions to modify variables in the caller’s scope.&lt;/p&gt;
&lt;h2 id=&quot;11-1-pointer-operations&quot;&gt;11.1. Pointer operations&lt;/h2&gt;
&lt;p&gt;Pointers are scalar types that support specific operators to deal with the “pointing-to” and “pointed-to” relationships, as well as arithmetic operations.&lt;/p&gt;
&lt;h3 id=&quot;11-1-1-address-of-and-object-of-operators&quot;&gt;11.1.1. Address-of and object-of operators&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Address-of operator (&lt;code&gt;&amp;amp;&lt;/code&gt;):&lt;/strong&gt; Retrieves the memory address of an object.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Object-of (dereference) operator (&lt;code&gt;*&lt;/code&gt;):&lt;/strong&gt; Accesses the object located at the pointer’s address.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.1 #1:&lt;/strong&gt; A program execution that uses &lt;code&gt;*&lt;/code&gt; with an invalid or null pointer fails.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#000000, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;include&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;stdio.h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Concept: Pointers allow functions to modify caller variables&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; double_swap&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; p0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt; double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; p1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    double&lt;/span&gt;&lt;span&gt; tmp &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; *&lt;/span&gt;&lt;span&gt;p0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; &amp;#39;*&amp;#39; (object-of) retrieves the value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;    *&lt;/span&gt;&lt;span&gt;p0 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; *&lt;/span&gt;&lt;span&gt;p1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;    *&lt;/span&gt;&lt;span&gt;p1 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span&gt; tmp&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;void&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    double&lt;/span&gt;&lt;span&gt; d0 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;5&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; d1 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Concept: &amp;#39;&amp;amp;&amp;#39; (address-of) passes the variable&amp;#39;s address&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;    double_swap&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;d0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span&gt;d1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.1.1 #1: Dereferencing a valid pointer is safe.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Dereferencing an invalid/null pointer would crash the program here.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span&gt; p_invalid &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span&gt; nullptr&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; *p_invalid = 5.0; // ERROR: Program execution fails.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;11-1-2-pointer-addition&quot;&gt;11.1.2. Pointer addition&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.2 #1:&lt;/strong&gt; A valid pointer refers to the first element of an array of the reference type.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.2 #2:&lt;/strong&gt; The length of an array object cannot be reconstructed from a pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.2 #3:&lt;/strong&gt; Pointers are not arrays.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concept:&lt;/strong&gt; Because pointers lose array length information, it is best practice to pass the length alongside the array and use array notation in function parameters to clarify intent.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#000000, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;include&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;stdio.h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Concept: Prefer array notation with size to clarify intent,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; even though &amp;#39;a&amp;#39; decays to a pointer.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; sum&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;size_t&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; len&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt; double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; a&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    double&lt;/span&gt;&lt;span&gt; total &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;size_t&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; ++&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        total &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; a&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    return&lt;/span&gt;&lt;span&gt; total&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;void&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; arr&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;3&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;0&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.1.2 #1 &amp;amp; #3: &amp;#39;ptr&amp;#39; refers to the first element, but is NOT the array itself.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span&gt; ptr &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt;arr&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.1.2 #2: We cannot determine &amp;#39;arr&amp;#39; has 3 elements just from &amp;#39;ptr&amp;#39;.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; We must pass the length explicitly.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;    printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;Sum: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FF7B72);&quot;&gt;%f&lt;/span&gt;&lt;span style=&quot;color: light-dark(#EE0000, #FF7B72);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; sum&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; ptr&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;11-1-3-pointer-subtraction-and-difference&quot;&gt;11.1.3. Pointer subtraction and difference&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.3 #1:&lt;/strong&gt; Only subtract pointers to elements of the same array object.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.3 #2:&lt;/strong&gt; All pointer differences have type &lt;code&gt;ptrdiff_t&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.3 #3:&lt;/strong&gt; Use &lt;code&gt;ptrdiff_t&lt;/code&gt; to encode signed differences of positions or sizes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.3 #4:&lt;/strong&gt; For printing, cast pointer values to &lt;code&gt;void*&lt;/code&gt; and use the format &lt;code&gt;%p&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#000000, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;include&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;stdio.h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;include&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;stddef.h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; For ptrdiff_t&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;void&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; arr&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;5&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;0&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span&gt; p1 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt;arr&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span&gt; p2 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt;arr&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;4&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.1.3 #1, #2, &amp;amp; #3: Subtracting pointers in the same array&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; yields a ptrdiff_t representing the distance in elements.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#267F99, #79C0FF);&quot;&gt;    ptrdiff_t&lt;/span&gt;&lt;span&gt; diff &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span&gt; p2 &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;-&lt;/span&gt;&lt;span&gt; p1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;    printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;Difference in elements: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FF7B72);&quot;&gt;%td&lt;/span&gt;&lt;span style=&quot;color: light-dark(#EE0000, #FF7B72);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; diff&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.1.3 #4: Cast to void* and use %p to print pointer addresses.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;    printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;Address of p1: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FF7B72);&quot;&gt;%p&lt;/span&gt;&lt;span style=&quot;color: light-dark(#EE0000, #FF7B72);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;p1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;11-1-4-pointer-validity&quot;&gt;11.1.4. Pointer validity&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.4 #1:&lt;/strong&gt; Pointers have a truth value (evaluate to &lt;code&gt;false&lt;/code&gt; if null, &lt;code&gt;true&lt;/code&gt; if valid).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.4 #2:&lt;/strong&gt; Set pointer variables to null as soon as you can.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.4 #3:&lt;/strong&gt; A program execution that accesses an object that has a non-value representation for its type fails.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.4 #5:&lt;/strong&gt; A pointer must point to a valid object, one position beyond, or be null.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.4 #6:&lt;/strong&gt; A program execution that computes a pointer value outside the bounds of an array object (or one element beyond) fails.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#000000, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;include&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;stdio.h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;void&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.1.4 #2: Initialize pointers to null immediately.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    char&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span&gt; name &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span&gt; nullptr&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.1.4 #1: Pointers have a truth value.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;        printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;Name is &lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FF7B72);&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#EE0000, #FF7B72);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt; else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;        printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;Pointer is null.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#EE0000, #FF7B72);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; A&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;2&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;0&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span&gt; p &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt;A&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    p &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.1.4 #5: Valid pointer, points one position beyond the array.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; printf(&amp;quot;%f&amp;quot;, *p); // ERROR: Accessing non-object fails (Takeaway 11.1.4 #3).&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; p += 3; // ERROR: Takeaway 11.1.4 #6: Computing value outside bounds + 1 fails.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;11-1-5-null-pointers&quot;&gt;11.1.5. Null pointers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Concept:&lt;/strong&gt; The pre-C23 macro &lt;code&gt;NULL&lt;/code&gt; hides type implementations (e.g., &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;0L&lt;/code&gt;, &lt;code&gt;(void*)0&lt;/code&gt;) and can cause backward compatibility or variadic function issues.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.1.5 #1:&lt;/strong&gt; Use &lt;code&gt;nullptr&lt;/code&gt; instead of &lt;code&gt;NULL&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#000000, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;include&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;stdio.h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;void&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.1.5 #1: Use the C23 standard nullptr instead of NULL macro.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    double&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt; const&lt;/span&gt;&lt;span&gt; nix &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span&gt; nullptr&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;!&lt;/span&gt;&lt;span&gt;nix&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;        printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;Properly using nullptr.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#EE0000, #FF7B72);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;11-2-pointers-and-structures&quot;&gt;11.2. Pointers and structures&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Concept:&lt;/strong&gt; Pointers are heavily used to manipulate structs directly. The &lt;code&gt;-&amp;gt;&lt;/code&gt; operator is used to access struct members via a pointer (it is equivalent to &lt;code&gt;(*ptr).member&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concept:&lt;/strong&gt; Opaque structures allow separating interfaces from implementation by forward-declaring the struct.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.2 #1:&lt;/strong&gt; Don’t hide pointer types inside a &lt;code&gt;typedef&lt;/code&gt;. Doing so obscures the fact that the type is a pointer and can receive &lt;code&gt;nullptr&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#000000, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;include&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;stdio.h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Concept: forward declaration of a struct (Opaque structure)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt; struct&lt;/span&gt;&lt;span&gt; toto toto&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Good: typedef aliases the struct, not the pointer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.2 #1: Avoid doing `typedef struct toto_s* toto;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;struct&lt;/span&gt;&lt;span&gt; toto &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    unsigned&lt;/span&gt;&lt;span&gt; value&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; toto_doit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;toto&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; t&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt; unsigned&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; val&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Check for nullptr validity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;        //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Concept: Use -&amp;gt; to access members of a struct pointer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#001080, #E6EDF3);&quot;&gt;        t&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #E6EDF3);&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; =&lt;/span&gt;&lt;span&gt; val&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;void&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    toto my_toto &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;0&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;    toto_doit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;my_toto&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 42&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;    printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;Value: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FF7B72);&quot;&gt;%u&lt;/span&gt;&lt;span style=&quot;color: light-dark(#EE0000, #FF7B72);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #E6EDF3);&quot;&gt; my_toto&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #E6EDF3);&quot;&gt;value&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;11-3-pointers-and-arrays&quot;&gt;11.3. Pointers and arrays&lt;/h2&gt;
&lt;h3 id=&quot;11-3-1-array-and-pointer-access-are-the-same&quot;&gt;11.3.1. Array and pointer access are the same&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.3.1 #1:&lt;/strong&gt; The two expressions &lt;code&gt;A[i]&lt;/code&gt; and &lt;code&gt;*(A+i)&lt;/code&gt; are equivalent.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concept:&lt;/strong&gt; Array-to-pointer decay. When arrays are passed to functions, they seamlessly decay into pointers to their first element.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#000000, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;include&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;stdio.h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;void&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; A&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;3&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;10&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 20&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 30&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;    int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span&gt; ptr &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span&gt; A&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Array decays to pointer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.3.1 #1: A[i] and *(A+i) are completely equivalent.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;    printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;A[1]: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FF7B72);&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#EE0000, #FF7B72);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; A&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;    printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;*(A+1): &lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FF7B72);&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#EE0000, #FF7B72);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; *&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;A &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; This applies to the pointer variable as well&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;    printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;ptr[1]: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FF7B72);&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#EE0000, #FF7B72);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; ptr&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;    printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;*(ptr+1): &lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FF7B72);&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#EE0000, #FF7B72);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt; *&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ptr &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;11-4-function-pointers&quot;&gt;11.4. Function pointers&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Concept:&lt;/strong&gt; Pointers can refer to executable code (functions), allowing dynamic dispatch (e.g., callbacks).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.4 #1:&lt;/strong&gt; A function name without following parenthesis decays to a pointer to its start.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.4 #2:&lt;/strong&gt; Function pointers must be used with their exact type (signatures must perfectly match).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeaway 11.4 #3:&lt;/strong&gt; The function call operator &lt;code&gt;()&lt;/code&gt; applies to function pointers.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#000000, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;include&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;stdio.h&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Typedef for a function pointer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; logger_function&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; msg&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; log_console&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FFA657);&quot;&gt; msg&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;    printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;LOG: &lt;/span&gt;&lt;span style=&quot;color: light-dark(#001080, #FF7B72);&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color: light-dark(#EE0000, #FF7B72);&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; msg&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#0000FF, #FF7B72);&quot;&gt;void&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.4 #1: function name &amp;#39;log_console&amp;#39; decays to a pointer.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.4 #2: Exact type match is required.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    logger_function&lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;*&lt;/span&gt;&lt;span&gt; logger &lt;/span&gt;&lt;span style=&quot;color: light-dark(#000000, #FF7B72);&quot;&gt;=&lt;/span&gt;&lt;span&gt; log_console&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt;    //&lt;/span&gt;&lt;span style=&quot;color: light-dark(#008000, #8B949E);&quot;&gt; Takeaway 11.4 #3: Function call operator applies directly to the pointer.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#795E26, #D2A8FF);&quot;&gt;    logger&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;System started.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#A31515, #A5D6FF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#AF00DB, #FF7B72);&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: light-dark(#098658, #79C0FF);&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
</feed>
