一、程序员编程C语言答疑合集
https://m.toutiaocdn.com/group/6718545102257521166/?app=news_article×tamp=1564490005&req_id=20190730203324010023029200813AAE1&group_id=6718545102257521166
更多C语言学习答疑文章,请参阅:程序员编程C语言答疑文章合集
点击下方,加入我的“C语言答疑课堂”圈子吧,第一时间看到我给大家带来的C语言试题解析!
二、【程序员编程】【C语言指针试题】
给你下述C程序代码:
int paraInt;int *pInt = ¶Int;scanf('%d', *pInt);
你觉得有问题吗?问题在哪里?
1、“己他”概念和“星指组合”概念来解题
这道C语言指针题看上去不是那么马上就能知道问题的,其实使用我提出的C语言指针“己他”概念和“星指组合”来解这道题是很简单的。有关C语言指针的“己他”概念和“星指组合”概念在我的专栏:
的第九章和第十章有详细的阐述,有兴趣的同学可以阅读这两章:
这道C语言指针试题就会用到“己他”概念中的“己值”、“他值”和“星指组合”的概念!
简单来说,这些概念的意思分别如下:
1.1 “己X”概念
“己X”分为己型、己址和己值。
“己型”:就是C语言指针自己的类型;
“己址”:就是C语言指针自己的地址;
“己值”:就是C语言指针自己的数据值;
1.2 “他X”概念
“他X”概念分为他型、他址和他值。
“他型”:就是C语言指针指向的对象的类型;
“他址”:就是C语言指针指向的对象的地址;
“他值”:就是C语言指针指向的对象的数据值;
1.3 “星指组合”概念
“星指组合”就是“星号”+“指针变量”的组合,这种组合的意思就是获取指针变量的他值!
2、C程序代码
我来把这道C语言指针题扩展成一段C程序代码,如下:
C程序代码
我定义了一个int变量paraInt和指针变量pInt,并且把paraInt的地址给了pInt的己值。下面通过键盘想给paraInt赋值,运行结果如下:
运行结果
结果报错了?
3、C程序代码分析
3.1 分析
我们仔细来看第9行:scanf('%d', *pInt);
我们都知道谁用scanf函数时,输入的那个对象前要加“&”号,但是这里没有&号,只有“*”号。
在上述专栏中,我说过“*pInt”这种写法就是使用“星指组合”获取到指针变量pInt的他值,然后这句代码就变成如下等价的写法:
scanf('%d', paraInt);
这下子你一看就知道问题在哪里了吧!
然后有的小伙伴抖机灵,说改成如下的形式就可以了:scanf('%d', &pInt);
这样的写法也是不对的,你可以上机运行下,看看paraInt的值是多少。这种写法是指针变量pInt的己址写法,因此你输入的值是给了指针变量pInt的己值!
正确的写法是:
scanf('%d', pInt);
也就是使用指针变量pInt的己值,因为在上述专栏我说过,指针变量pInt的己值就是他址,是paraInt的地址,这种写法等同于:scanf('%d', ¶Int);
三、C语言指针试题总结
这道C语言指针试题看上去是不是有点绕?其实也是绕不开我提出的“己他”概念和“星指组合”概念,所以我一直跟同学们说“C语言指针就是个纸老虎”!