辨析int main()、int main(void)、void main(void)、main()和main(void)、int main() 和 void main()

//--------------------------------------------------
标准的main函数格式为:
int main(int argc, char *argv[]); /*即返回值为整型,带两个参数,argc为命令行参数的个数,argv为指针数组,
                                                  前argc个指针为参数列表,最后一个指针值为NULL。*/


/* main函数,又称主函数,作为绝大大部分C程序唯一的入口,是要求有返回值的,该返回值返回给操作系统来表明改程序的执行状况。
返回0代表程序正常执行成功,返回非0值代表程序异常结束,因此返回值需要是int整型,于是有了```int main()```的规范。
如果使用```void main```,既声明主函数没有返回值的话,程序随能编译、运行成功,却不利于操作系统判断其状态,
这对于由很多C程序构成的大型项目来说是可能会是致命的。*/


只声明```main```的话系统默认为```int main```。```void main```无论何时都不应该使用因为主函数必须有返回值表明程序运行状态


//---------------------------------------------------------------------------------------------
int  main(void)
{


  return 0;  /*表示这个主函数的返回值是一个int型的数值,且有void 表示此函数的参数一定为空,传参数的话,就会有编译错                  误; 也就是在程序的最后,要写那句经典的 return 0。int main() 没有void的话就不一样了,他表示此函数的参数可                    以是任意多个, 但对参数不予处理,所以你传参数,也不会有编译错误,只不过不处理罢了。 */       
 }


//---------------------------------------------------------------------------------------------


void main(void)//表示的是这个主函数是没有返回值的。


---------------------------------------------------------------------------------------------


main()和main(void)/*这两个main函数都不能接受参数。main()这种写法在C99标准以前的版本中使用,
                                      而在C99标准之后如果main函数不需要接受参数的情况下,会写做main(void)。*/


----------------------------------------------------------------------------------------------
int main() 和 void main() /*返回值类型不同,不过由于大多数时候,程序的运行结果可以由其它方式判定,
                                    比如程序的打印信息,所以main的返回值变得不重要,于是大部分编译器都支持无返回值类型的                                             main,这时默认返回给主调进程0值*/

### 指针函数与函数指针的区别及用法 #### 1. **定义** - **指针函数**是指返回值为指针类型的函数。换句话说,这种函数会返回一个地址作为其结果[^1]。 - **函数指针**则是指向某一具体函数的指针变量。通过该指针可以调用对应的函数[^2]。 --- #### 2. **语法表示** ##### (1) 指针函数 指针函数的形式如下所示: ```cpp 数据类型* 函数名称(参数列表); ``` 例如: ```cpp int* getPointer(); ``` 上述代码表明 `getPointer` 是一个指针函数,它接受无参数并返回一个指向整数 (`int`) 的指针。 ##### (2) 函数指针 函数指针的形式较为复杂,通常需要括号来明确优先级。形式如下: ```cpp 返回类型 (*指针变量名)(参数类型列表); ``` 例如: ```cpp void (*funcPtr)(int); ``` 这说明 `funcPtr` 是一个指向返回值为空(`void`)且接收单个整型参数的函数的指针[^3]。 --- #### 3. **使用方法** ##### (1) 指针函数的使用 指针函数的主要用途在于动态分配内存或者返回某些结构体/数组的首地址。以下是一个例子: ```cpp #include <iostream> // 定义一个指针函数 int* createArray(int size, int value) { int* array = new int[size]; for (int i = 0; i < size; ++i) { array[i] = value; } return array; } int main() { int* myArray = createArray(5, 7); // 创建大小为5、初始值均为7的数组 for (int i = 0; i < 5; ++i) { std::cout << myArray[i] << " "; // 输出:7 7 7 7 7 } delete[] myArray; // 释放动态分配的内存 return 0; } ``` 在这个例子中,`createArray` 就是一个典型的指针函数,它的作用是创建一个指定大小初值的动态数组,并将其起始地址返回给调用者。 ##### (2) 函数指针的使用 函数指针常用于回调机制或实现多态行为。以下是基于引用的一个简单实例: ```cpp #include <iostream> typedef void (*FuncPtr)(int); // 定义两个不同的函数 void addOne(int num) { std::cout << "Add one: " << num + 1 << "\n"; } void subtractOne(int num) { std::cout << "Subtract one: " << num - 1 << "\n"; } int main() { FuncPtr operation; // 根据条件选择不同操作 bool choice = true; if (choice) { operation = addOne; } else { operation = subtractOne; } operation(10); // 如果 choice=true,则输出 Add one: 11;否则 Subtract one: 9 return 0; } ``` 此程序展示了如何利用函数指针根据运行时状态切换执行逻辑。 --- #### 4. **区别总结** | 特性 | 指针函数 | 函数指针 | |-----------------|-----------------------------------|-------------------------------| | **本质** | 返回值为指针 | 变量本身即为指针 | | **声明方式** | 数据类型\* 函数名(参数列表) | 返回类型 (\*指针名)(参数列表) | | **主要用途** | 动态资源管理 | 实现灵活控制流 | --- #### 5. **典型应用场景** - **指针函数**: 当需要从函数内部传递大块的数据(如字符串、数组或其他复合数据结构)到外部环境时非常有用。 - **函数指针**: 广泛应用于事件驱动编程模型下的回调函数注册、算法库的设计以及模拟面向对象中的虚函数功能等方面。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值