课前一题:
#include <stdio.h>
int swap(int *p,int *q) //用指针指向a,b的地址
{
int m;
m= *q;
*q = *p;
*p = m;
return 0;
}
int main()
{
int a = 5;
int b = 6;
swap(&a,&b); //取a,b的地址
printf("result = %d %d",a,b);
数组和指针的区别
空间分配:静态分配 动态分配
访问效率:直接访问 间接访问
安全性:容易造成数组越界 容易造成内存泄漏
函数形参:指针
处理对象:对数据进行处理 对地址进行处理
连续分配空间 不一定连续
函数:
复用性
维护性
迭代性
函数名(自注释性)——可读性
函数名是指针常量:保存函数存放的地址
函数调用:
1、
|
通过函数名找到函数的入口地址;
2、给形参分配的内存空间;
3、传值:把实参变量对应空间的值传给形参
4、执行函数体里的语句
不能返回局部变量地址
echo $? 当前程序执行后的返回值
return VS exit
return 是返回给系统的
如何实现函数的。。。
入口参数检查,//if( src == NULL|| head == NULL || tail == NULL){return NULL;}
返回值异常处理
不要依赖别人的程序
功能要单一
函数指针(传参时用):
int (*p_func)(int,int)
P_func = add;初始化
//p_func = &add;
回调函数(函数指针指向的函数)
用函数指针实现加法运算:
#include <stdio.h>
int add(int m,int n)
{
return m + n;
}
int cal(int (*func)(int,int),int m,int n)
{
return func(m,n);
}
int main()
{
int num1 = 5;
int num2 = 6;
int result = cal(add,num1,num2);
printf("result =%d\n",result);
}
如何用C语言实现面向对象:
作业:函数的可变参数
主函数的参数:(命令行参数)
int main() (int argc,char *argc[])
argc参数个数(也算命令本身)
#include <stdio.h>
int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("Please input a param!\n");
exit(1);
}
printf("argc = %d\n",argc);
int i;
for(i = 0; i < argc; i++) //也可以用函数指针数组来存放 int (*fuc_arry[3])(int, int);
{
printf("argv[%d] = %d\n",i,atoi(argv[i]));
}
return 0;
}
删除字符串中出现次数最少的字符(仅限a~z)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 1024
char my_remove(char *str)
{
if(NULL == str)
{
return NULL;
}
int len = strlen(str);
char *ptr = (char *)malloc(sizeof(char) * (len + 1));
int i = 0;
int a[26] = {0};
for(i = 0;i < len;i++)
{
a[str[i] - 'a']++;
}
int min = 256;
for(i = 0;i < 26;i++)
{
if(a[i] != 0 && min > a[i])
{
min = a[i];
}
}
int j = 0;
for(i = 0;i < len;i++)
{
if(a[str[i] - 'a'] != min)
{
ptr[j] = str[i];
j++;
}
}
ptr[j] = '\0';
int len1 = strlen(ptr);
printf("%s\n",ptr);
free(ptr);
}
int main()
{
char str[MAX_SIZE] = {0};
printf("Please input a string:\n");
gets(str);
my_remove(str);
//printf("result = %s",str);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
char * func(int *num)
{
char *src = "hello world";
*num = 5;
return src;
}
传入参数,传出参数:
int main()
{
int num;
char *ptr = func(&num);
printf("ptr = %s\n",ptr);
printf("num = %d\n",num);
return 0;
}