程序猿之---C语言细节27(函数无参数时细节、函数默认返回int型证明、return默认还回值、void指针++操作)

主要内容:函数无参数时细节、函数默认返回int型证明、return默认还回值、void指针++操作

一、函数无参数时细节

函数无参数时应该加上void

在c语言中一个函数

void f();

在使用时传递参数f(2);没有报错,而在c++中则会报错

最好加上void来明确函数是无参数的

二、函数默认返回类型为int型

见下面程序

三、return默认返回1

细节:return不可返回执行栈内存中的指针,因为该内存在函数体结束时自动销毁

四、void 指针++操作

void *p;

p++; //在ANSI编译中错误、在GNU编译器中p++和char*一致

#include <stdio.h>
a()
{
	return 3;
	//return ; //直接写成这个形式默认是返回 1 的
}

b(int a, int b)
{
	return a+b;
}
int main()
{
	printf("func a return = %d\n",a(2));   // 函数无参数应申明为void,在c中不声明传了参数没有报错,在C++就会报错,所以无论C/C++,函数无参数就申明为void
	printf("func b retunr = %d\n",b(300,5000)); // 此处说明函数无返回类型,默认返回int型 

	printf("-------------------------\n");
	void *p;
	p++;// 使用编译器gcc、mingw5编译通过(即GNU),它们认为p++为char*类型的,使用VC6.0编译错误(即ANSI) 

	return 0;
}

输出:

时间: 2024-12-26 06:18:49

程序猿之---C语言细节27(函数无参数时细节、函数默认返回int型证明、return默认还回值、void指针++操作)的相关文章

程序猿之---C语言细节24(段错误、类型提升、sizeof &#39;A&#39;)

主要内容:段错误.类型提升.sizeof  'A' #include <stdio.h> int main() { union test{ char a[10]; int b; }u; int *p = (int *)&(u.a[1]); // 没有引起总线错误 *p = 17; printf("%d\n",*p); #if 0 int *q = 0; // 引起段错误,在linux中运行可看到段错误,在windows下运行时直接出错 *q = 1; #endif

把一个函数作为参数传入到函数中

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <script> function f1(func){ //func函数作为参数传入f1函数 console.log('1'); //首先进入f1函数 setTimeout(function(){ console.log('2'); //继续进入setTimeout方法

为什么赋值操作符函数的参数为const引用,返回值为引用

为什么赋值操作符函数的参数为const引用,返回值为引用 1.返回值类型 返回类型一般声明为类型的引用,并在函数结尾时返回实例自身的引用(即*this).这里主要有两个原因:(1)返回引用可以减少一次拷贝构造和析构函数导致不必要的开销,因为返回值类型不是引用,会创建一个匿名对象,这个匿名对象时个右值,获取return的值.(2)可以实现连续赋值 在例子中 b=c=a; 返回值不是引用类型也是可以的,其运算顺序 b=(c=a); c得到一个右值,再将右值赋给b,所以逻辑上没有问题的.但是如果是 (

js函数传递参数时,如果是路径类型的参数,里边包含:&#39;\&#39;字符报错

在函数中,传递的参数中有“\”字符,js会将它默认为转义字符串,如果没有出现与他匹配的转义字符串,就会缺失,例如: 将这样的一个字符串作为一个参数:C:\Program Files (x86)\MySQL\MySQL Server 5.7\data\ 传递到函数里边的值就会被默认转化为:C:Program Files (x86)MySQLMySQL Server 5.7data 如果要实现这个参数的精确传递,就需要将字符串进行处理,一般会有两种方式: ①:将字符串里边的 ‘\’ 字符替换成 ‘/

程序猿之---C语言细节22(函数返回指针注意事项&lt;悬空指针&gt;、查看进程可以分配的内存大小)

主要内容:函数返回指针注意事项<悬空指针>.查看进程可以分配的内存大小 #include <stdio.h> char * favorite_fruit() { static char fruit[] = "apple"; // 不加static的话这个函数还回的指针以及悬空,因为在函数退出时fruit组数被销毁 // 加了static后fruit数组分配在数据段里,而不是堆栈中,生命期和程序一样长,函数退出时变量 // 依然有效 return fruit; }

程序猿之--C语言细节15(预处理命令细节#error、运算符#和##、__FILE__、__LINE__)

主要内容:预处理命令细节#error.运算符#和##.__FILE__.__LINE__ #include <stdio.h> /* 包含这个头文件,并不是将其所有函数都链接进程序*/ /* ##运算符 */ #define MK_ID(n) i##n /* 表示将两个记号连接 */ int MK_ID(1), MK_ID(2),MK_ID(3); /* 预处理后变成int i1,i2,i3;*/ /* 定义多个type##_max函数,函数返回类型和参数类型用define决定 * 如GENE

程序猿之---C语言细节28(const变量初始化、数组大小用const变量细节、const变量与#define宏、volatile修饰)

主要内容:const变量初始化.数组大小用const变量细节.const变量与#define宏.volatile修饰 一.const变量初始化时必须赋值 二.const变量在C++中可以做数组大小元素.在C中不行,因为它是变量 三.const和#define区别:内存分配 四.volatile修饰一些变量:易被操纵系统.硬件.多线程修改的变量 #include <stdio.h> int main() { /* 测试1 */ const int b; // 不初始化会报错 // b = 2;

程序猿之---C语言细节17(求time_t的最大值、strlen求的是长度、malloc分配字符内存细节、switch的中default细节)

主要内容:求time_t的最大值.strlen求的是长度.malloc分配字符内存细节.switch的中default细节 #include <stdio.h> #include <time.h> int main() {     /*****************************************************************         time_t最大值测试     ************************************

程序猿之---C语言细节21(#define和typedef区别、结构体细节)

主要内容:#define和typedef区别.结构体细节 #include <stdio.h> #define INT_D int* #define CHAR_D char int main() { /*#define 与 typedef区别*/ typedef int* INT_T; typedef char CHAR_T; INT_T a,b; // a.b都为int型指针 INT_D c,d; // c为int型指针.d为int整型 unsigned CHAR_D e; // #defi