1、malloc
头文件:#include <stdlib.h>
void *malloc( size_t size ) ;
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int main()
6 {
7 char *p = NULL;
8 p = (char *)malloc(100);
9 if(NULL == p)
10 {
11 printf("malloc fail!\n");
12 return -1;
13 }
14 strcpy(p,"hello world");
15 puts(p);
16 free(p);
17 p = NULL;
18 //puts(p);
19 return 0;
20 }
注意:使用完malloc开辟的内存空间后,要free,并且p = NULL
2、函数
定义: 存储类型 数据类型 函数名(数据类型 形参1,数据类型 形参2,……)
{
函数体;
返回值;(return)
}
注:形参为局部变量,调用时分配内存空间,用完释放
数据类型:返回值的数据类型
函数名:自定义的,遵循标识符的命名规则
函数的声明:
存储类型 数据类型 函数名(数据类型 形参1,数据类型 形参2,……);
存储类型 数据类型 函数名(数据类型,数据类型,……);
函数的调用:
函数名(实参名1,实参名2,……);
注:实参的类型和数量必须要保持一致
函数的传参:实质是值传递,把实参的值传给形参
当全局变量与局部变量重名时,局部变量会覆盖全局变量
在使用函数时,形参可以和实参重名
数组的传参:
一维数组传参:传数组的首地址,数组元素的个数
二维数组传参:传数组的行号,列号,首地址(int (*p)[n]/int p[][ n ]);
函数指针:指向函数的指针
int add(int a, int b);
int(*p)(int, int);
p = add;
p(a,b);
#include <stdio.h>
int add(int a, int b)
{
return (a+b);
}
int main()
{
int(*p)(int, int);
p = add;
int a = 5, b = 10;
printf("%d\n",p(a, b));
return 0;
}
指针函数:返回值为指针的函数
char *fun()
{
char str[ ] = "hello world";
return str;
}
注意:编译的时候有警告,返回一个局部变量的地址,因为str这个数组fun函数执行完后这块内存空间就被释放掉了。
解决方法:
1、static
2、char *str = “hello world”;
3、malloc
函数指针数组
int (*p[4] ) ( int , int );
#include <stdio.h>
int add(int a, int b)
{
return a+b;
}
int sub(int a, int b)
{
return a-b;
}
int mul(int a, int b)
{
return a*b;
}
int div(int a, int b)
{
return a/b;
}
int main()
{
int a = 10, b = 5;
int (*p[4])(int, int);
p[0] = add;
p[1] = sub;
p[2] = mul;
p[3] = div;
printf("%d\n", p[0](a, b));
printf("%d\n", p[1](a, b));
printf("%d\n", p[2](a, b));
printf("%d\n", p[3](a, b));
return 0;
}
递归函数:自己调用自己
#include <stdio.h>
void fun(int i)
{
if(i > 0)
{
fun(i/2);
}
printf("%d\n", i);
}
int main()
{
fun(10);
return 0;
}
int main(int argc,char **argv)
其中:argc表示输入的命令行参数的个数
argv:指针数组,数组的元素是输入的命令行参数的首地址
头文件:#include <stdlib.h>
void *malloc( size_t size ) ;
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int main()
6 {
7 char *p = NULL;
8 p = (char *)malloc(100);
9 if(NULL == p)
10 {
11 printf("malloc fail!\n");
12 return -1;
13 }
14 strcpy(p,"hello world");
15 puts(p);
16 free(p);
17 p = NULL;
18 //puts(p);
19 return 0;
20 }
注意:使用完malloc开辟的内存空间后,要free,并且p = NULL
2、函数
定义: 存储类型 数据类型 函数名(数据类型 形参1,数据类型 形参2,……)
{
函数体;
返回值;(return)
}
注:形参为局部变量,调用时分配内存空间,用完释放
数据类型:返回值的数据类型
函数名:自定义的,遵循标识符的命名规则
函数的声明:
存储类型 数据类型 函数名(数据类型 形参1,数据类型 形参2,……);
存储类型 数据类型 函数名(数据类型,数据类型,……);
函数的调用:
函数名(实参名1,实参名2,……);
注:实参的类型和数量必须要保持一致
函数的传参:实质是值传递,把实参的值传给形参
当全局变量与局部变量重名时,局部变量会覆盖全局变量
在使用函数时,形参可以和实参重名
数组的传参:
一维数组传参:传数组的首地址,数组元素的个数
二维数组传参:传数组的行号,列号,首地址(int (*p)[n]/int p[][ n ]);
函数指针:指向函数的指针
int add(int a, int b);
int(*p)(int, int);
p = add;
p(a,b);
#include <stdio.h>
int add(int a, int b)
{
return (a+b);
}
int main()
{
int(*p)(int, int);
p = add;
int a = 5, b = 10;
printf("%d\n",p(a, b));
return 0;
}
指针函数:返回值为指针的函数
char *fun()
{
char str[ ] = "hello world";
return str;
}
注意:编译的时候有警告,返回一个局部变量的地址,因为str这个数组fun函数执行完后这块内存空间就被释放掉了。
解决方法:
1、static
2、char *str = “hello world”;
3、malloc
函数指针数组
int (*p[4] ) ( int , int );
#include <stdio.h>
int add(int a, int b)
{
return a+b;
}
int sub(int a, int b)
{
return a-b;
}
int mul(int a, int b)
{
return a*b;
}
int div(int a, int b)
{
return a/b;
}
int main()
{
int a = 10, b = 5;
int (*p[4])(int, int);
p[0] = add;
p[1] = sub;
p[2] = mul;
p[3] = div;
printf("%d\n", p[0](a, b));
printf("%d\n", p[1](a, b));
printf("%d\n", p[2](a, b));
printf("%d\n", p[3](a, b));
return 0;
}
递归函数:自己调用自己
#include <stdio.h>
void fun(int i)
{
if(i > 0)
{
fun(i/2);
}
printf("%d\n", i);
}
int main()
{
fun(10);
return 0;
}
int main(int argc,char **argv)
其中:argc表示输入的命令行参数的个数
argv:指针数组,数组的元素是输入的命令行参数的首地址