|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 命令行函数理解问题(*++argv)[0] 和 *++argv[0] )
我的收件箱(0)
共有
4820
人关注过本帖
标题:
命令行函数理解问题(*++argv)[0] 和 *++argv[0] )
只看楼主
加入收藏
九转星河
来 自:长长久久
等 级:
贵宾
威 望:
52
帖 子:5023
专家分:14003
注 册:2016-10-22
第
21
楼
收藏
得分:0
回复 13楼 renkejun1942
void fun();
void* p=fun;
(*(void(*)())p)();
这样也可以实现指针函数的功能~虽然比较麻烦一些~不过感觉通用性较强~
[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-13 11:08
举报帖子
使用道具
赠送鲜花
renkejun1942
来 自:不是这样
等 级:
贵宾
威 望:
33
帖 子:1645
专家分:5297
注 册:2016-12-1
第
22
楼
收藏
得分:0
回复 21楼 九转星河
typeof( fun * ) p = fun;
09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-13 11:10
举报帖子
使用道具
赠送鲜花
Emotiona
等 级:
黑侠
帖 子:311
专家分:581
注 册:2017-3-7
第
23
楼
收藏
得分:0
回复 21楼 九转星河
我草,你们还在讨论这个,帖子都要被你俩盖完了
2017-05-13 11:12
举报帖子
使用道具
赠送鲜花
Emotiona
等 级:
黑侠
帖 子:311
专家分:581
注 册:2017-3-7
第
24
楼
收藏
得分:0
回复 16楼 renkejun1942
你再帮我解释下argv[1][1]怎么来的,转不过来了
(*++argv)[0] == *(argv[0] + 1)[0] == argv[1][0];
*++argv[0] == *(argv[0] + 1) == argv[1] == argv[1][0];
怎么得来argv[1][1] argv[1][2] 这个地方看了几个小时了。太浪费时间了。蛋疼
2017-05-13 11:25
举报帖子
使用道具
赠送鲜花
renkejun1942
来 自:不是这样
等 级:
贵宾
威 望:
33
帖 子:1645
专家分:5297
注 册:2016-12-1
第
25
楼
收藏
得分:0
当时我做过笔记,所以我忘记了。
这些东西没什么好硬要理解的。示例代码只是示例,并不表示他的写法一定是好的。
理解他整个程序的思路就好了。
实际上在gcc上 *++argv[0] 会产生一个警告信息。
我忘记我当时用的什么编译器了,貌似没产生警告。
[此贴子已经被作者于2017-5-13 11:29编辑过]
09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-13 11:27
举报帖子
使用道具
赠送鲜花
renkejun1942
来 自:不是这样
等 级:
贵宾
威 望:
33
帖 子:1645
专家分:5297
注 册:2016-12-1
第
26
楼
收藏
得分:0
main函数的第二个参数写成 **我觉得会更好,至少不会让人误以为,这是一个指针数组。
++agvr 的结果 是 argv中存储的值,自增 n 个字节。
*++argv 从上面的结果得出 此时 它指向 argv存储的地址。
(*++argv)[0],已知 *++argv指向一个字符串,【0】,则为该字符串的0号元素。
[此贴子已经被作者于2017-5-13 11:33编辑过]
09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-13 11:30
举报帖子
使用道具
赠送鲜花
九转星河
来 自:长长久久
等 级:
贵宾
威 望:
52
帖 子:5023
专家分:14003
注 册:2016-10-22
第
27
楼
收藏
得分:0
以下是引用
renkejun1942
在2017-5-13 09:52:22的发言:
用函数指针调用函数,干嘛要解一次引用。
直接
p();
看到书上的要求,都是要求写成(*p)(),我觉得很多余。
纯粹是在给编译器找事儿做。
void* p=fun;
不过这样引用(void(*)())p();会报错~
void (*p)()=fun;
p();
和(*p)();还是有区别的~
p和*p的地址级别不同~值也不同~
void fun();
void (*p)()=fun;
printf("%d %d %d %d %d %d\n",(int*)p,*(int*)p,(int*)p+1,*(int*)p+1,**(int**)p,**(int**)p+1);
前者增值为4后者增值为1~
写
void (*p)()=fun;
p();
这样符合常理~
课本这样写(*p)();猜测是为了强调调用的是指针函数吧~~~
顺便运行一下最后两个是怎么回事~看来函数地址这东东不是这么好弄啊~~
[此贴子已经被作者于2017-5-13 11:35编辑过]
[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-13 11:31
举报帖子
使用道具
赠送鲜花
Emotiona
等 级:
黑侠
帖 子:311
专家分:581
注 册:2017-3-7
第
28
楼
收藏
得分:0
回复 25楼 renkejun1942
我日哦。昨天晚上到今天上午就在理解这行代码,还输没搞清楚。虽说是个实例代码,但是理解了的话,指针就又掌握了一点。学c本来指针就很重要的。你再看看能不能想出来是咋回事。现在我脑袋已经成豆腐渣了
2017-05-13 11:31
举报帖子
使用道具
赠送鲜花
wp231957
来 自:神界
等 级:
贵宾
威 望:
423
帖 子:13688
专家分:53332
注 册:2012-10-18
第
29
楼
收藏
得分:0
6楼的代码难道不能解决问题吗
虽然数组和指针关系密切。但是这里无论你想取参数。还是想取参数中的某个字符(虽然着没有意义)
这都和二维数组没啥关系。为啥非要纠结于此
DO IT YOURSELF !
2017-05-13 11:34
举报帖子
使用道具
赠送鲜花
renkejun1942
来 自:不是这样
等 级:
贵宾
威 望:
33
帖 子:1645
专家分:5297
注 册:2016-12-1
第
30
楼
收藏
得分:0
回复 28楼 Emotiona
看26楼,给你分析过程了。
09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-13 11:34
举报帖子
使用道具
赠送鲜花
40
3/4页
1
2
3
4
快速回复:
命令行函数理解问题(*++argv)[0] 和 *++argv[0] )
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015507 second(s), 8 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved