入门系列:基础认知——main函数参数说明

说明
  本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
  QQ 群 号:513683159 【相互学习】
内容来源
  main函数的参数详解
  main函数的的两个参数

main函数

一、概念

  main函数,又称主函数,是程序执行的起点,也是终点。有且仅有一个。
  C语言规定main函数函数形参有两个:
    ①argc:参数计数器,整型变量 ,表示参数的个数.
    ②argv:参数数组本身,指向字符串的指针数组,表示存放参数的具体内容.【参数表】
    【注意】:argv[0]保存自身运行的目录路径和程序名,从argv[1]开始才是指向对应的参数
  故main函数一般写为:
    int main (int argc,char *argv[]){…}
    int main (int argc,char **argv){…}

二、实践
#include<stdio.h>

int main(int argc,char**argv)
{
		int i;
        printf("argc = %d\n",argc);
        for(i = 0 ; i < argc ;i++){
                printf("argv[%d]=%s\n",i,argv[i]);
        }
        return 0;
}

  ①编译程序:gcc main.c -o main
  ②运行程序:./main,可得:

argc = 1
argv[0]=./main

  ③运行程序并添加参数:./main para1 para2 para3

argc = 4
argv[0]=./main
argv[1]=para1
argv[2]=para2
argv[3]=para3
三、main函数第三个参数,一般不使用

  每个程序都会接收到一张环境表,也是一个字符指针数组(包含null结束)。
  这也是main函数的第三个参数:envp环境指针。(格式为:name = value)
  具体可查看以下示例及结果:

#include<stdio.h>

int main(int argc,char*argv[],char *envp[])
{
                int i;
        printf("argc = %d\n", argc);
        for(i = 0 ; i < argc ;i++)
        {
                printf("argv[%d]=%s\n",i,argv[i]);
        }

        for(i = 0 ; envp != NULL ; i++)
        {
                printf("%d %s\n",i,envp[i]);
        }
        return 0;
}
argc = 1
argv[0]=./test
0 SHELL=/bin/bash
1 SESSION_MANAGER=local/computer:@/tmp/.ICE-unix/1738,unix/computer:/tmp/.ICE-unix/1738
2 QT_ACCESSIBILITY=1
3 COLORTERM=truecolor
4 XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
5 XDG_MENU_PREFIX=gnome-
6 GNOME_DESKTOP_SESSION_ID=this-is-deprecated
7 LC_ADDRESS=zh_CN.UTF-8
...
四、环境变量
#include<stdio.h>

int main(int argc,char*argv[])
{
        char **ptr;
        extern char **environ;
        for(ptr = environ ; *ptr != 0 ; ptr++)
        {
                printf("%s\n",*ptr);
        }
        return 0;
}
$:  gcc test.c -o test
$:  ./test 
SHELL=/bin/bash
...
  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
保护继承是指子类继承父类的成员,但是只有类内和友元可以访问这些成员,对于类外部的其他代码是不可见的。这样可以保护父类的实现细节,同时也可以在子类中使用这些成员。 下面以学生信息类为例,演示如何使用保护继承。 ```c++ #include <iostream> #include <string> using namespace std; // 父类:人类 class Person { public: Person(string name, int age) : m_name(name), m_age(age) {} void showInfo() { cout << "姓名:" << m_name << endl; cout << "年龄:" << m_age << endl; } protected: // 保护成员 string m_name; // 姓名 int m_age; // 年龄 }; // 子类:学生类 class Student : protected Person { public: Student(string name, int age, int score) : Person(name, age), m_score(score) {} void showInfo() { Person::showInfo(); // 调用父类的 showInfo 函数 cout << "成绩:" << m_score << endl; } private: int m_score; // 成绩 }; int main() { Student s("小明", 18, 90); s.showInfo(); // 调用子类的 showInfo 函数 return 0; } ``` 在上面的例子中,父类 `Person` 中的成员 `m_name` 和 `m_age` 被声明为保护成员,子类 `Student` 继承了这两个成员。在子类中,我们使用 `protected` 访问修饰符将父类的成员变量和成员函数设置为保护成员,这样子类就可以访问这些成员了。 在子类中,我们重写了 `showInfo` 函数,并在其中调用了父类的 `showInfo` 函数,然后输出了子类新增的成员 `m_score`。最后在 `main` 函数中,我们创建了一个 `Student` 对象,并调用了 `showInfo` 函数,输出了学生的信息。 在这个例子中,我们使用保护继承来访问父类的成员,这样可以保护父类的实现细节,同时也可以在子类中使用这些成员。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值