置顶

数组变量和指针的关系

翁恺 发表于2023年02月14日
<p>老师说数组变量可以被看作是const的指针变量,到底是“<strong>可以被看作</strong>”,还是“<strong>就是</strong>”指针呢?</p><p>用程序证据(而不是搜索教科书)来说明你的观点。</p><p>(提示:如果对const指针的所有的操作都可以对数组变量做,而且结果一致,就说明数组变量就是指针;如果有某个操作不能做,或者结果不一致,就说明不是指针)</p>
404 回复

    1楼

  • MNKJXY122712019012郑容 发表于2023年04月17日
    0 | 0 | 举报
    <p>①如果对const指针的所有的操作都可以对数组变量做,而且结果一致,就说明数组变量就是指针;如果有某个操作不能做,或者结果不一致,就说明不是指针。</p><p>②当数组变量作为参数时,它不是严格意义上的指针,更不是常量指针,但是他可以被看做指针,而且常量指针的操作都可以作用于数组变量;当数组变量不是参数时,即它在主函数中,它有两层含义 ,在用在sizeof上时,它似乎被看做了一个数组整体,但是其他情况下,都可以被当做常量指针。&nbsp;</p>
    MNKJXY122712019012郑容 发表于2023年04月17日
    添加评论
  • 2楼

  • FZU852201508郑辰宇 发表于2023年04月18日
    0 | 0 | 举报
    <p><span style="" rgb="" -webkit-text-size-adjust="" auto="" background-color="" rgba="" >如果对const指针的所有的操作都可以对数组变量做,而且结果一致,就说明数组变量就是指针;如果有某个操作不能做,或者结果不一致,就说明不是指针。</span> </p> <p><span style="" rgb="" -webkit-text-size-adjust="" auto="" background-color="" rgba="" >当数组变量作为参数时,它不是严格意义上的指针,更不是常量指针,但是他可以被看做指针,而且常量指针的操作都可以作用于数组变量;当数组变量不是参数时,即它在主函数中,它有两层含义 ,在用在sizeof上时,它似乎被看做了一个数组整体,但是其他情况下,都可以被当做常量指针。&nbsp;</span> </p>
    FZU852201508郑辰宇 发表于2023年04月18日
    添加评论
  • 3楼

  • 石家庄铁道大学-交2003-1-白飒潇 发表于2023年04月18日
    0 | 0 | 举报
    如果对const指针的所有的操作都可以对数组变量做,而且结果一致,就说明数组变量就是指针;如果有某个操作不能做,或者结果不一致,就说明不是指针。当数组变量作为参数时,它不是严格意义上的指针,更不是常量指针,但是他可以被看做指针,而且常量指针的操作都可以作用于数组变量;当数组变量不是参数时,即它在主函数中,它有两层含义 ,在用在sizeof上时,它似乎被看做了一个数组整体,但是其他情况下,都可以被当做常量指针。
    添加评论
  • 4楼

  • 花一Arthur 发表于2023年04月18日
    0 | 0 | 举报
    <p>由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。</p><p>当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。&nbsp;</p><p><br ></p><p>#include&lt;stdio.h&gt;</p><p>int main()</p><p>{</p><p> int a[]={0,1,2,3,4,5,6,7,8,9,10};</p><p> int *const p=&amp;a[0];</p><p> </p><p> printf(&quot;sizeof(a)=%d,sizeof(p)=%d\n&quot;,sizeof(a),sizeof(p));</p><p> printf(&quot;main:p=%p\n&quot;,p);</p><p> printf(&quot;main:a=%p\n&quot;,a);</p><p> a[13]=10;</p><p> printf(&quot;main:a[13]=%d\n&quot;,a[13]);</p><p> p[13]=10;</p><p> printf(&quot;main:p[13]=%d\n&quot;,p[13]);</p><p> sum(a,11);</p><p>&nbsp;}&nbsp;</p><p>&nbsp;</p><p>&nbsp;int sum(int a[],int len)</p><p>&nbsp;{</p><p>&nbsp; int sum=0;</p><p>&nbsp; int i=0;</p><p>&nbsp; int *const p=&amp;a[0];</p><p>&nbsp;<strong> //[Error] 'a' redeclared as different kind of symbol&nbsp; &nbsp;int *const a=&amp;a[0];</strong></p><p><strong>&nbsp; //[Error] redefinition of 'p'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int *const p=&amp;a[0];</strong></p><p><strong>此处两个错误的类型不同,说明从严格意义上而言,数组参数实际上并不是常量指针的类型</strong></p><p>&nbsp; printf(&quot;p=%p\n&quot;,p);</p><p>&nbsp; printf(&quot;a=%p\n&quot;,a);</p><p>&nbsp; p[1]=10;</p><p>&nbsp; printf(&quot;p[1]=%d\n&quot;,p[1]);</p><p>&nbsp; a[1]=10;</p><p>&nbsp; printf(&quot;a[1]=%d\n&quot;,a[1]);</p><p>&nbsp; a[13]=10;</p><p>&nbsp; printf(&quot;a[13]=%d\n&quot;,a[13]);</p><p>&nbsp; p[13]=10;</p><p>&nbsp; printf(&quot;p[13]=%d\n&quot;,p[13]);</p><p>&nbsp; </p><p>&nbsp; for(i=0;i&lt;len;i++){</p><p>&nbsp; sum+=a[i];</p><p> }</p><p> printf(&quot;sizeof(a)=%d\n&quot;,sizeof(a));</p><p> &nbsp;</p><p> return sum;</p><p>&nbsp;}</p><p>&nbsp;运行结果:</p><p>sizeof(a)=44,sizeof(p)=8</p><p>main:p=000000000062FDE0</p><p>main:a=000000000062FDE0</p><p>main:a[13]=10</p><p>main:p[13]=10</p><p>p=000000000062FDE0</p><p>a=000000000062FDE0</p><p>p[1]=10</p><p>a[1]=10</p><p>a[13]=10</p><p>p[13]=10</p><p>sizeof(a)=8</p><p><br ></p>
    花一Arthur 发表于2023年04月18日
    添加评论
  • 5楼

  • cqtbi2103318 发表于2023年04月18日
    0 | 0 | 举报
    由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。#includeint main(){int a[]={0,1,2,3,4,5,6,7,8,9,10};int *const p=
    cqtbi2103318 发表于2023年04月18日
    添加评论
  • 6楼

  • cqtbi2103318 发表于2023年04月18日
    0 | 0 | 举报
    由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。#includeint main(){int a[]={0,1,2,3,4,5,6,7,8,9,10};int *const p=
    cqtbi2103318 发表于2023年04月18日
    添加评论
  • 7楼

  • 刘赛20200706309 发表于2023年04月19日
    0 | 0 | 举报
    由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。#includeint main(){int a[]={0,1,2,3,4,5,6,7,8,9,10};int *const p=
    刘赛20200706309 发表于2023年04月19日
    添加评论
  • 8楼

  • 2202040144张立旭 发表于2023年04月19日
    0 | 0 | 举报
    由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。#includeint main(){int a[]={0,1,2,3,4,5,6,7,8,9,10};int *const p=
    2202040144张立旭 发表于2023年04月19日
    添加评论
  • 9楼

  • mooc140396415984274457 发表于2023年04月19日
    0 | 0 | 举报
    由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。#includeint main(){int a[]={0,1,2,3,4,5,6,7,8,9,10};int *const p=
    mooc140396415984274457 发表于2023年04月19日
    添加评论
  • 10楼

  • 王孟娟 发表于2023年04月19日
    0 | 0 | 举报
    由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。#includeint main(){int a[]={0,1,2,3,4,5,6,7,8,9,10};int *const p=
    王孟娟 发表于2023年04月19日
    添加评论
  • 11楼

  • mooc118776544446202486 发表于2023年04月19日
    0 | 0 | 举报
    由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。#includeint main(){int a[]={0,1,2,3,4,5,6,7,8,9,10};int *const p=
    mooc118776544446202486 发表于2023年04月19日
    添加评论
  • 12楼

  • 刘赛L 发表于2023年04月19日
    0 | 0 | 举报
    由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。#includeint main(){int a[]={0,1,2,3,4,5,6,7,8,9,10};int *const p=
    刘赛L 发表于2023年04月19日
    添加评论
  • 13楼

  • mooc154446636833413789 发表于2023年04月19日
    0 | 0 | 举报
    由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。#includeint main(){int a[]={0,1,2,3,4,5,6,7,8,9,10};int *const p=
    mooc154446636833413789 发表于2023年04月19日
    添加评论
  • 14楼

  • 胡文兴MOOC 发表于2023年04月19日
    0 | 0 | 举报
    由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。#includeint main(){int a[]={0,1,2,3,4,5,6,7,8,9,10};int *const p=
    胡文兴MOOC 发表于2023年04月19日
    添加评论
  • 15楼

  • mooc147588558155743458 发表于2023年04月19日
    0 | 0 | 举报
    由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。#includeint main(){int a[]={0,1,2,3,4,5,6,7,8,9,10};int *const p=
    mooc147588558155743458 发表于2023年04月19日
    添加评论
  • 16楼

  • SunnyG623 发表于2023年04月19日
    1 | 0 | 举报
    <p>从严格意义上而言,数组参数实际上并不是常量指针的类型</p>
    SunnyG623 发表于2023年04月19日
    添加评论
  • 17楼

  • ZUCC-32001130-张文杰 发表于2023年04月19日
    0 | 0 | 举报
    <p>如果对const指针的所有的操作都可以对数组变量做,而且结果一致,就说明数组变量就是指针;如果有某个操作不能做,或者结果不一致,就说明不是指针。</p><p>当数组变量作为参数时,它不是严格意义上的指针,更不是常量指针,但是他可以被看做指针,而且常量指针的操作都可以作用于数组变量;当数组变量不是参数时,即它在主函数中,它有两层含义 ,在用在sizeof上时,它似乎被看做了一个数组整体,但是其他情况下,都可以被当做常量指针。&nbsp;</p><p><br ></p>
    ZUCC-32001130-张文杰 发表于2023年04月19日
    添加评论
  • 18楼

  • 郑轻大-嵌入式软件-21-07-王豪 发表于2023年04月19日
    0 | 0 | 举报
    <p>如果对const指针的所有的操作都可以对数组变量做,而且结果一致,就说明数组变量就是指针;如果有某个操作不能做,或者结果不一致,就说明不是指针。</p><p>当数组变量作为参数时,它不是严格意义上的指针,更不是常量指针,但是他可以被看做指针,而且常量指针的操作都可以作用于数组变量;当数组变量不是参数时,即它在主函数中,它有两层含义 ,在用在sizeof上时,它似乎被看做了一个数组整体,但是其他情况下,都可以被当做常量指针。&nbsp;</p><p><br ></p><p><br ></p>
    添加评论
  • 19楼

  • mooc139984711217529647 发表于2023年04月19日
    0 | 0 | 举报
    <p>由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。</p><p>当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。&nbsp;</p><p><br ></p><p>#include&lt;stdio.h&gt;</p><p>int main()</p><p>{</p><p> int a[]={0,1,2,3,4,5,6,7,8,9,10};</p><p> int *const p=&amp;a[0];</p><p> </p><p> printf(&quot;sizeof(a)=%d,sizeof(p)=%d\n&quot;,sizeof(a),sizeof(p));</p><p> printf(&quot;main:p=%p\n&quot;,p);</p><p> printf(&quot;main:a=%p\n&quot;,a);</p><p> a[13]=10;</p><p> printf(&quot;main:a[13]=%d\n&quot;,a[13]);</p><p> p[13]=10;</p><p> printf(&quot;main:p[13]=%d\n&quot;,p[13]);</p><p> sum(a,11);</p><p>&nbsp;}&nbsp;</p><p>&nbsp;</p><p>&nbsp;int sum(int a[],int len)</p><p>&nbsp;{</p><p>&nbsp; int sum=0;</p><p>&nbsp; int i=0;</p><p>&nbsp; int *const p=&amp;a[0];</p><p>&nbsp; //[Error] 'a' redeclared as different kind of symbol&nbsp; &nbsp;int *const a=&amp;a[0];</p><p>&nbsp; //[Error] redefinition of 'p'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int *const p=&amp;a[0];</p><p>此处两个错误的类型不同,说明从严格意义上而言,数组参数实际上并不是常量指针的类型</p><p>&nbsp; printf(&quot;p=%p\n&quot;,p);</p><p>&nbsp; printf(&quot;a=%p\n&quot;,a);</p><p>&nbsp; p[1]=10;</p><p>&nbsp; printf(&quot;p[1]=%d\n&quot;,p[1]);</p><p>&nbsp; a[1]=10;</p><p>&nbsp; printf(&quot;a[1]=%d\n&quot;,a[1]);</p><p>&nbsp; a[13]=10;</p><p>&nbsp; printf(&quot;a[13]=%d\n&quot;,a[13]);</p><p>&nbsp; p[13]=10;</p><p>&nbsp; printf(&quot;p[13]=%d\n&quot;,p[13]);</p><p>&nbsp; </p><p>&nbsp; for(i=0;i&lt;len;i++){</p><p>&nbsp; sum+=a[i];</p><p> }</p><p> printf(&quot;sizeof(a)=%d\n&quot;,sizeof(a));</p><p> &nbsp;</p><p> return sum;</p><p>&nbsp;}</p><p>&nbsp;运行结果:</p><p>sizeof(a)=44,sizeof(p)=8</p><p>main:p=000000000062FDE0</p><p>main:a=000000000062FDE0</p><p>main:a[13]=10</p><p>main:p[13]=10</p><p>p=000000000062FDE0</p><p>a=000000000062FDE0</p><p>p[1]=10</p><p>a[1]=10</p><p>a[13]=10</p><p>p[13]=10</p><p>sizeof(a)=8</p><p><br ></p>
    mooc139984711217529647 发表于2023年04月19日
    添加评论
  • 20楼

  • ZOUZHAO 发表于2023年04月19日
    0 | 0 | 举报
    由具体操作可知,当数组变量作为参数时,常量指针的操作可以作用于数组变量,但是严格意义上并不是常量指针,也不是严格意义上的指针。当数组变量在主函数中,在sizeof被看做了一个数组整体,其他情况下,常量指针的操作都可以作用于数组变量。#includeint main(){int a[]={0,1,2,3,4,5,6,7,8,9,10};int *const p=
    ZOUZHAO 发表于2023年04月19日
    添加评论
点击加载更多