c语言笔记 函数参数的等价(下)

目录

为什么这三种写法是等价的?

char *(argv[argc])

char *(argv[])

char **argv

代码示例

总结


为什么这三种写法是等价的?

    这三种写法是等价的,数组在作为函数参数的时候会变成指针,数组的大小会被系统编译器自动忽略
所以char *(argv[argc]) 等价于 char *(argv[]) 
*和[]是可以相互转换的所以char *(argv[])等价 char *(*argv)

作为命令行:这里我们需要的是一个指针数组,其实上面的理解都可以理解成一个指针数组,因为指针数组
与char型的二维数组好搭配
int *p[5] = {指针,指针,指针...} 变量的类型 int *[5]  数组的元素类型:int * --->指针
char *(argv[argc])    char *(argv[])   char *(*argv)
上面三种写法只有在作为函数参数的时候是等价的,如果是在函数内定义的那么它们就是不一样的

  1. char *(argv[argc])

    • 这种写法声明argv是一个数组,其大小为argc,每个元素是一个指向char的指针。

    • 在函数参数中,数组的大小argc实际上会被编译器忽略,因为数组作为参数传递时会退化为指针。

  2. char *(argv[])

    • 这种写法声明argv是一个数组,但没有指定数组的大小。

    • 在函数参数中,未指定大小的数组会被编译器视为一个指针。

  3. char **argv

    • 这种写法直接声明argv是一个指向char *的指针,即二级指针。

        在C语言中,当数组作为函数参数传递时,它会退化为指向其首元素的指针。这意味着,无论你如何声明数组参数(无论是指定大小还是不指定大小),编译器最终都会将其视为一个指针。因此,char *(argv[argc])char *(argv[])在语义上等价于char **argv

代码示例

以下是一个简单的示例,展示这三种声明方式的等价性:

#include <stdio.h>

// 使用 char *(argv[argc])
void printArguments(int argc, char *(argv[argc])) {
    for (int i = 0; i < argc; i++) {
        printf("Argument %d: %s\n", i, argv[i]);
    }
}

// 使用 char *(argv[])
void printArguments2(int argc, char *(argv[])) {
    for (int i = 0; i < argc; i++) {
        printf("Argument %d: %s\n", i, argv[i]);
    }
}

// 使用 char **argv
void printArguments3(int argc, char **argv) {
    for (int i = 0; i < argc; i++) {
        printf("Argument %d: %s\n", i, argv[i]);
    }
}

int main() {
    char *arguments[] = {"arg0", "arg1", "arg2"};
    int argCount = sizeof(arguments) / sizeof(arguments[0]);

    printArguments(argCount, arguments);
    printArguments2(argCount, arguments);
    printArguments3(argCount, arguments);

    return 0;
}

        在这段代码中,printArgumentsprintArguments2printArguments3三个函数的参数声明方式不同,但它们的功能和行为完全相同。

总结

  • 数组参数的退化:数组作为函数参数时会退化为指向其首元素的指针。
  • 解引用和下标操作的等价性:在C语言中,*(ptr + i)ptr[i]是等价的。
  • 数组大小在参数声明中被忽略:在函数参数中声明数组时,数组的大小会被编译器忽略。
Tor Browser是一个基于Mozilla Firefox的免费开源网络浏览器,旨在提供用户更安全、更私密的上网体验。它通过使用Tor网络来匿名化用户的网络连接,保护用户的隐私和数据安全。Tor网络是一个由志愿者运行的网络,通过将用户的网络流量通过多个节点进行随机路由,来隐藏用户的真实IP地址和身份信息。这种多重加密和匿名化的过程使得用户的网络活动更加难以被追踪和监视。 要使用Tor Browser,您需要下载并安装它。首先,您可以访问Tor项目的官方网站(https://www.torproject.org/)下载Tor Browser的安装包。然后,根据您的操作系统选择正确的版本进行下载。安装包下载完成后,您可以运行安装程序,并按照指示进行安装。 在安装完成后,您可以打开Tor Browser。当您第一次打开Tor Browser时,它会连接到Tor网络并进行一些初始化设置。这可能需要一些时间,请耐心等待。 一旦Tor Browser成功连接到Tor网络,您就可以开始使用了。您可以像使用任何其他浏览器一样使用Tor Browser浏览网页、发送电子邮件等。不同的是,Tor Browser通过路由您的网络流量通过多个节点来隐藏您的真实IP地址,从而保护您的身份和隐私。 需要注意的是,Tor Browser可以提供更高的匿名性和隐私保护,但并不能完全消除所有网络安全风险。使用Tor Browser时,仍然需要注意不要分享个人敏感信息,避免下载不安全的文件或访问不受信任的网站。此外,由于Tor网络的性质,您可能会遇到一些访问速度较慢的问题。 总结起来,Tor Browser是一个提供更安全、更私密的上网体验的浏览器。它通过使用Tor网络来匿名化用户的网络连接,保护用户的隐私和数据安全。您可以通过下载并安装Tor Browser来开始使用它。请注意,在使用Tor Browser时仍需保持警惕并采取适当的网络安全措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值