第九章 编译预处理
1.宏定义:用一个指定的标识符来代表一个字符串。
不带参数的宏定义:#define 标识符字符串
带参数的宏定义: #define 宏名(参数表) 字符串
终止宏定义的作用域:#undef
2.文件包含处理:一个源文件将另一个源文件包含进来。
形式:#include“文件名”
3.条件编译:对源程序中的一部分指定编译条件。
第十章 指针
1.指针:是一个变量的地址,即分配给一个变量的内存起始地址。
指针变量:是存放指针(另一变量地址)的变量。
指针变量的定义形式: 类型标识符 *标识符
2.指针变量的引用
例如:int x=5,y,z,a[]={1,2,3,4};
int *px,*py;
px=&x;py=a;
*px=5;
z=*px;
3.指针与函数参数
例:交换两个变量内容的程序
swap(int *px, int *py)
{ int temp;
temp=*px;
*px=*py;
*py=temp;
}
main()
{ int a,b;
scanf(“%d”,&a);scanf(“%d”.&b);
printf(“a=%d\tb=%d\n”,a,b);
swap(&a,&b);
printf(“a=%d\tb=%d\n”,a,b);
}
通过地址(指针)实现被调用函数直接修改调用函数中变量的内容。
4. 指针和数组
数组的指针是指数组的起始地址,任何能用数组下标完成的操作都能由指针来完成。通过指针引用数组元素,例:若有int a[],*pa;pa=a;则:a[i]=*(pa+i)=*(a+i)
5.多维数组的指针
例:设有一个二维数组a[3][4],则:数组名a是数组的首地址,a+i与a[i]等价,是第i行的首地址,a[i]+j表示第i行第j列的地址。
若有:int *p=a;
则:数组中任一元素地址可表示为*(p+i)+j,或为p+i*m+j。(m列数)
指向由m个元素组成的一维数组的指针变量,例:int(*p)[m]
6.字符串与指针
例:若有:char *s;s="I am a string" 表示s指向字符串的首地址,s+i表示第i个字符的地址。输出时从指针所指地址开始直到字符串结束标记(‘\0’)为止。
7.指针数组和多级指针
凡是可以用多维数组处理的问题,都可以用指针数组来解决,但两者有所区别。
指针数组定义形式:类型标识符 数组名[长度说明]如:int *p[4];
指针数组的初始化:允许在定义时初始化,
如:static char *a[]={"ab","cde","fghi"};
指针数组的引用:a+i表示第i个字符串。
多级指针定义形式:类型标识符 **指针变量名; 如:char **p;
多级指针的初始化:p=a;
多级指针的引用:p+i表示第i个字符串,p++表示下一个字符串,*(p+i)+j表示第i个字符串中第j个字符的地址。
8.函数的指针
定义形式:数据类型标识符 (*指针变量名)(); 如:int (*f)();
初 始 化:int max(x,y);f=max;
用指针变量调用函数:c=(*f)(a,b);
9.返回指针值的函数
定义形式:类型标识符函数名(形参列表); 如:int *a(x,y);
10.指针数组
指针数组的元素均为指针类型数据。
定义形式:类型标识符 *数组名[数组长度]; 如:int *p[4];
相关推荐: