形参:没有真正调用;实参:有真正调用
函数间接递归:A调用B,B调用A
被调用函数定义在调用函数之后的,需要提前定义
递归调用时,问题规模的大小:n;
1.一定有一个确定的问题的规模
2.可以将主问题分成若干个子问题,并且子问题的问题规模小于主问题,但求解方法完全一样
作用域:变量的范围,本函数内定义了一个和全局中相同的变量
extern:全局变量外部说明
寄存器:速度快,空间小
全局数据区:生存期为全局;局部空间(一般储存于栈中):生存期为一个函数,函数运行完之后,空间回收,用栈储存。静态变量生存区为全局
寄存器变量:register;
f(i,j)
register int i;
int j;{}
宏定义:#define ll long long...(不加分号!)
#define Macro
.....
undefine...
int x=3,*p,p=&x//p指向x;
p是一个指针,*是一个运算,是对地址进行运算,*p是一个整型变量的指针
*:第二级运算符
int *intpt=&j; 即*intpt取j的地址
&k=kPtr; k=*kPtr
*和&运算是互逆的!
凡是i能用的地方,*ip也能用
++*ip=++(*ip);//ip不变*ip变
d=*ip(即存储单元数)++=*(ip++)//指向ip后一个对象
//即*运算是从右到左结合
数组?
int a[100],*p;
p=&a[0]//p=a;p+i=&a[i]
flexible and simple
*(a+i)=a[i]/若p=&a[0];则*(p+i)表示a[i],*(p+i)也可写成p[i]
for(p=a;p<=&a[99];p++)
printf("*p=%d\t",*p);
等同:for(p=a;p<=&a[99];)
printf("*p=%d\t",*p++);
赋值.ing:
while((*to++=*from++)!='\0')
k++;
字符串复制:void strcpy(char *to, char *from)
删字:
char s[]="Fudan University",*p,*q,c='i';
for(p=q=s;*p;p++)
if(*p!=c) *q++=*p;
*q='\0';//重新构成字符串
swap函数要使用指针~
对于一个数组:a[]==*a,意为指向某个数组
int sum(int *a,int n)
{
int s=0;
for(;n--;)
s+=*a++;
return s;
}
等同于:
int sum(int *a,int n)
{
int *ap,s;
for(s=0,ap=a;ap<a+n;ap++)
s+=*ap;
return s;
}
字符串拷贝函数——指针写法
while(*to++=*from++)
三目运算符找字符:
char *searchCh(char *s, char c)
{
while(*s&&*s!=c)
s++;
return *s?s:NULL;
}