指针分析:数组指针,指针数组,指针的指针,野指针深度解析

#include <stdio.h>
void main()
{
    char *a[3]={"C","C++","Java"};
    char *p,**pp;
    puts(a[1]);/*输出C++,puts函数输出整个字符串包括'\0'*/      /*C++*/
    printf("%c\n",*(a[2]+2));/*输出v,a[2]为字符串java,a[2]+2表示首字符向后移动2位,即字母v,"*"表示取内容*/    /*v*/

    pp=a;/*数组名a当没有遇到sizeof,&,定义时,表示数组首地址a[0],pp为指针*/          

    puts(*(pp+1));    /* 此时pp为首地址a[0],pp+1向下移动一个地址为a[1],"*"取地址里的内容即为C++,所以输出C++*/    /*C++*/

    printf("%c\n",*(*(pp+1)+1));  /*由上知道*(pp+1)为C++,*(pp+1)+1,表示C++由C向后移动一个字符此时为+,所以输出+*/     /*+*/
    puts(*(pp+1)+1);   /*puts输出从当前字符+一直到'\0'结束,所以输出++*/    /*++*/
    p=a[1];  /*a[1]表示C++的首地址,赋值给p*/
    puts(p+1);  /*输出C++首地址向后一个的地址即+的地址,然后从当前地址输出到'\0'结束即为 ++*/     /*++*/
    pp=&p;     /*此时pp为p的地址,即此时pp指向p即a[1],a[1]也是指针,所以此时即为指针的指针*/
    puts(*pp);   /*pp即为p的地址,即指向p,p为a[1]这个地址指向C++所以输出C++*/     /*C++*/
    puts(*(pp-1));  /*pp代表C++的首地址即C的地址,然而pp-1是C的地址前面的一个地址,然而我们并不知道是什么,不是"C"的地址,其实"C"与"C++"之间隔了很多未知的地址,     所以此时的指针为野指针,会输出一些很奇怪的字符或者乱码*/
}



/*代码运行时要把后面的注释删了,防止可能出现一些不必要的错误*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半岛铁盒.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值