argc,argv你真的理解了吗?
作者:高桥惜员_136 | 来源:互联网 | 2023-08-22 12:53
argc,argv你真的理解了吗?体会一下指针的灵活性和2级指针的使用。本来我以为我早就理解了argc,argv[]但是当我看到有人使用**argv,**++argv,*
argc, argv 你真的理解了吗?
体会一下指针的灵活性和2级指针的使用。
本来我以为我早就理解了argc,argv[]
但是当我看到有人使用 **argv, **++argv, *++*argv时
还是让我犯晕,特此记录。
#include
int main(int argc, char *argv[])
{
while (--argc > 0 && **++argv == '-') {
}
return 0;
}
gdb hello
set args 123 456 789
b main
run
Breakpoint 1, main (argc=0x4, argv=0x7fffffffde18) at hello.c:5
5 while (--argc > 0 && **++argv == '-') {
gdb$ p argc // argc 是一个内存变量,存储4, 没什么好说的
$1 = 0x4
gdb$ p argv
$2 = (char **) 0x7fffffffde18 // argv 是一个内存变量,它存储了一个地址
gdb$ x/4a argv // 这个地址指向了一个地址数组,可见它至少是一个2级指针
0x7fffffffde18: 0x7fffffffe1f6 0x7fffffffe213
0x7fffffffde28: 0x7fffffffe217 0x7fffffffe21b
gdb$ p argv[0] // 后面的指针分别指向命令行及参数
$3 = 0x7fffffffe1f6 "/home/hjj/MyTest/hello/hello"
gdb$ p argv[1]
$4 = 0x7fffffffe213 "123"
gdb$ p argv[2]
$5 = 0x7fffffffe217 "456"
gdb$ p argv[3]
$6 = 0x7fffffffe21b "789"
gdb$ p argv[4] // 后面是指向空的指针,不过我们不要这样使用,应该用 argc 来判断。
$7 = 0x0
gdb$ p **++argv // argv 加1, ++argv 就是指针加8(64bits), argv 将变为0x7fffffffde20
// *argv 将是 0x7fffffffe213 (第一次指针解耦合)
// **argv 将是 '1' (第二次指针解耦合)
$8 = 0x31
gdb$ p **argv // 由于argv 值已经改变,所以第一次解耦合为0x7fffffffe213, 第二次解耦合为'1'
$9 = 0x31
gdb$ p argv
$10 = (char **) 0x7fffffffde20
gdb$ p *++*argv // *argv 仍然是0x7fffffffe213, 是个字符串指针, ++*argv 为0x7fffffffe214, 再解耦合为‘2’
$11 = 0x32
gdb$ p *++*argv // ++*argv 后变成了0x7fffffffe215, 再解耦合为'3'
$12 = 0x33
gdb$ p *++*argv // 同上为'0'
$13 = 0x0
gdb$ p *++*argv // *argv 的数值不断增加,指到了下一个字符串上了。重申一下 *argv 是argv 的解耦合。
$14 = 0x34
gdb$ p *argv // *argv 是 0x7fffffffe217 , 它指向”456“ 串
$15 = 0x7fffffffe217 "456"
gdb$ p *++*argv // *argv 又递增了,其解耦合为‘5’
$16 = 0x35
gdb$ p *argv // *argv 指向一个字串"56"
$17 = 0x7fffffffe218 "56"
gdb$
推荐阅读
-
题目描述输入整型数组和排序标识,对其元素按照升序或降序进行排序(一组测试用例可能会有多组数据)本题有多组输入,请使用whil ...
[详细]
蜡笔小新 2024-09-30 18:28:29
-
题意给出一个长度为n的序列,有一些位置可以放任意的数,问最长上升序列的长度。n ...
[详细]
蜡笔小新 2024-09-30 00:01:10
-
-
蜡笔小新 2024-09-30 19:37:45
-
DFS基本概念步骤优缺点典型例题递推基本概念直接或者间接调用自身的算法称为递归算法一般数据n ...
[详细]
蜡笔小新 2024-09-30 12:02:17
-
题目链接:杭电多校7-VirtualJudgevjudge上题目显示的有问题,我下面附上官方题目:样例输入:32201 ...
[详细]
蜡笔小新 2024-09-30 10:31:00
-
题目描述 FarmerJohn新买了一块长方形的牧场,这块牧场被划分成M行N列(1<M<12;1<N<12),每一格都是一块正方形的土地。FJ打 ...
[详细]
蜡笔小新 2024-09-29 11:31:29
-
蜡笔小新 2024-09-30 15:14:04
-
很好的博客:https:blog.csdn.netqq_39809664articledetails79934516可持久化数组#include#inclu ...
[详细]
蜡笔小新 2024-09-30 15:02:35
-
importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader;importjava.io. ...
[详细]
蜡笔小新 2024-09-30 13:46:51
-
2019独角兽企业重金招聘Python工程师标准packagejavaBasic;importjava.util.HashMap;importjava.util.Map; ...
[详细]
蜡笔小新 2024-09-30 11:23:11
-
我正在使用数组列表通过构建一个交互式菜单供用户选择来存储来自用户输入的值。到目前为止,我的两个选择是为用户提供向列表输入数据和读取列表的全部内容。到目前为止,我创建的代码由两个类组成。 ...
[详细]
蜡笔小新 2024-09-30 10:25:00
-
下面是一个用openssl实现获取https网页内容的demo,整个流程比较简单,主要封装的API如下staticinthttps_init(http ...
[详细]
蜡笔小新 2024-09-29 16:41:10
-
1.什么是hashcode方法?hashcode方法返回对象的哈希码值在应用程序的执行期间,只要对象的equals方法的比较操作所用到的信息没有改变& ...
[详细]
蜡笔小新 2024-09-29 14:43:29
-
词法分析,是编译器的第一个模块,也是最简单的模块。最简单,指的是相对于编译器这种大型程序而言,与一般的代码相比还是有点复杂的 ...
[详细]
蜡笔小新 2024-09-29 12:51:26
-
此题有一个大坑id范围为1e9此题题意是按照同类按照价格大小从大到小输出,如果价格相等再按照id从小到大输出。#includeusin ...
[详细]
蜡笔小新 2024-09-29 12:21:33
-