指针与数组

指针与数组有着本质的区别,分别举例来说明他们的工作过程。

 

char szC[5] = "abcd";

char c = szC[3];

上面这条语句的工作过程如下:

1.编译器符号表中有个szC,对应地址1234;

2.将地址1234加上偏移3,得1237;

3.取地址1237的内容。

 

char * p = "abcd";

char c = p[3];

上面这条语句的工作过程如下:

1.编译器符号表中有个p,对应地址5678;

2.取地址5678的内容,9876;

3.将地址9876加上偏移3,得9879;

4.取地址9879中的内容;

 

Then,如果定义一个数组char p[5] = "abcd";而在另一个文件中这样声明:extern char * p;编译器的原则是,既然p声明为指针,那么不管它原来定义是指针还是数组,都按指针来处理。那么char c = p[3];的工作过程将按照上面的第二种情况来进行,如下:

1.编译器符号表中有个p,对应地址1234;

2.取地址1234的内容,'a',即97;

3.将地址97加上偏移3,得100;

4.取地址100中的内容。

可见,上面的过程将会引发不可预知的后果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值