c语言 指针不能赋值吗,程序员编程C语言指针答疑:指针赋值没那么简单

166914615_1_20190726114430283

C语言指针,纸老虎

一、程序员编程C语言答疑合集

更多C语言学习答疑文章,请参阅:程序员编程C语言答疑文章合集

也可以加入下方我的“C语言答疑课堂”圈子,第一时间看到我给大家带来的C语言试题解析!

二、【程序员编程】【C语言指针试题】

给你下述C程序代码:int paraInt1 = 1, paraInt2 = 2;

int const paraInt3 = 3;

const int *pInt1 = &paraInt1;

int *const pInt2 = &paraInt2;

int const *pInt3 = &paraInt1;

*paraInt3 = 4;

pInt1 = &paraInt2;

*pInt2 = 5;

pInt2 = (int *)0x6;

pInt2 = &paraInt1;

pInt3 = 0x123;

请问这段C程序代码哪里有错?

三、【计算机编程】【C语言指针答疑】

1、“己他”概念来解题

这道C程序题的代码看上去让人“眼花缭乱”,其实使用我提出的C语言指针“己他”概念来解这道题还是很简单的。有关C语言指针的“己他”概念在我的专栏:

的第九章和第十章有详细的阐述,如下:

简单来说,C语言指针的“己他”概念分为“己X”概念和“他X”概念,分别如下:

1.1 “己X”概念

“己X”分为己型、己址和己值。

“己型”:就是C语言指针自己的类型;

“己址”:就是C语言指针自己的地址;

“己值”:就是C语言指针自己的数据值;

1.2 “他X”概念

“他X”概念分为他型、他址和他值。

“他型”:就是C语言指针指向的对象的类型;

“他址”:就是C语言指针指向的对象的地址;

“他值”:就是C语言指针指向的对象的数据值;

这道C语言指针试题就会用到“己他”概念中的“己值”、“他值”的概念!

2、C程序代码

我来把这道C语言指针题扩展成一段C程序代码,如下:

166914615_2_20190726114430377

C程序代码

这段C程序代码我定义了四个int型变量,接着我又定义了三个指针变量,并且使用const来修饰指针变量。然后我编译的结果如下:

166914615_3_20190726114430518

编译结果

3、C程序代码分析

下面我们就用“己值”的概念来分析这道C语言试题!

3.1 分析1

在C程序代码的第6行和第12行有如下语句:第6行:int const paraInt3 = 3;

第12行:*paraInt3 = 4;

第6行C代码仅仅是定义了一个int型变量paraInt3,可是在第12行却想把一个整数“4”赋值给paraInt3的他值。在我的专栏中很清晰地解释过:“他值是指针才有的概念,基本数据类型不可能有他值的概念”,所以第12行编译器肯定要报错。

3.2 分析2

在C程序代码的第9行、第15行和第16行有如下语句:第9行:int *const pInt2 = &paraInt2;

第15行:pInt2 = (int *)0x6;

第16行:pInt2 = &paraInt1;

第9行中定义指针变量pInt2时,前面有const修饰符,意思就是指针变量pInt2的初始己值一旦被赋值后,后面就不能再变了。可是在C程序代码第15行和第16行仍然试图给指针变量pInt2的己值赋值,编译器当然会报错了。

3.3 分析3

在C程序代码的第17行有如下语句:第17行:pInt3 = 0x123;

这一行中改变指针变量pInt2的己值是可以的,奈何pInt2的己型和0x123不对应。

我在专栏中说过,指针变量pInt2的己型是地址类型,而0x123只是一个int型的16进制,把一个int型赋值给一个地址类型,这八竿子打不着的事儿编译器当然会告警了!

四、C语言指针答疑试题总结

这道C程序题从代码来看,跟「C语言指针答疑」const与指针的混搭风 这篇文章的C程序试题很相像,使用C语言指针的“己他”概念就可以了,所以这道题也是个纸老虎而已!

https://www.toutiao.com/a6716788249035014660/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值