1、尤其是指针参数,尽量使用assert宏做入口校验, assert函数功能及用法! assert(NULL != strDest);
2、典型的递归方式计算字符串长度
int my_strlen( const char* strDest )
{
assert(NULL != strDest);
if ('\0' == *strDest)
{
return 0;
}
else
{
return (1 + my_strlen(++strDest));
}
}
2、不能通过改变形参指针的值(形参所指向的地址)来改变实参指针的地址,实现改变实参指针所指向地址变量的值。
#include "stdio.h"
swap(int *p1,int *p2)
{int *temp;
temp=p1;
p1=p2;
p2=temp;
}
main()
{
int a,b;
int *pointer_1,*pointer_2;
scanf("%d%d",&a,&b);
pointer_1=&a;pointer_2=&b;
if(a<b) swap(pointer_1,pointer_2);//pointer_1,pointer_2所指向的地址不能在swap中改变后再传回来
printf("\n%d,%d\n",a,b);
scanf("%d,%d",&a,&b);
}
此时形参指针的地址就好比变量一样,子函数结束时生命周期就结束了。改变后的地址不能传递回来!要是用过指向指针的指针就可以了。
3、函数指针变量定义的一般形式为:
类型说明符 (*指针变量名)();//指向的是一个函数入口,类型说明符是被指向函数的返回值类型
int max(int a,int b)
{
if(a>b)return a;
else return b;
}
main()
{
int max(int a,int b);
int(*pmax)();
int x,y,z;
pmax=max;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=(*pmax)(x,y);
printf("maxmum=%d",z);
}
4、指针型函数
类型说明符 *函数名(形参表)
{
…… /*函数体*/
}
5、指针数组
类型说明符 *数组名[数组长度]//一组有序的指针集合,通常指向一个二维数据,字符串数组
6、共用体:相同同区域存储相不同类型数据 在共用体类型变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用