C语言重难点

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.指针变量、指向指针的指针变量。

这里定义了一个可以指向返回值为int型,同时带有两个参数也是int型的函数指针。

使用方法:
int Key_Scan(int x); /*声明一个函数*/
int (*pSacn)(int); /*定义一个函数指针*/
pScan = Key_Scan; /*将函数Key_Scan的首地址赋值给函数指针pScan*/
测试代码:
#include <stdio.h>
int Max(int, int); //函数声明
int main(void)
{
int(*p)(int, int); //定义一个函数指针
int a, b, c;
p = Max; //把函数Max赋给指针变量p, 使p指向Max函数
printf("please enter a and b:");
scanf("%d%d", &a, &b);
c = (*p)(a, b); //通过函数指针调用Max函数
printf("a = %d\nb = %d\nmax = %d\n", a, b, c);
return 0;
}
int Max(int x, int y) //定义Max函数
{
int z;
if (x > y)
{
z = x;
}
else
{
z = y;
}
return z;
}
运行结果:
please enter a and b:4 3
a = 4
b = 3
max = 4
(2)指针函数
指针函数就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。

定义方式:函数返回值类型* 函数名(参数列表)
如定义:int * fun(int x,int y)
测试代码:
#include <stdio.h>
int * GetDate(int wk,int dy);
{
int wk,dy;
do{
printf("Enter week(1-5)day(1-7)\n");
scanf("%d%d",&wk,&dy);
}while(wk<1||wk>5||dy<1||dy>7);
printf("%d\n",*GetDate(wk,dy));
}
int * GetDate(int wk,int dy)
{
static int calendar[5][8]={
{1,2,3,4,5,6,7},
{8,9,10,11,12,13,14},
{15,16,17,18,19,20,21},
{22,23,24,25,26,27,28},
{29,30,31,-1}};
return &calendar[wk-1][dy-1];
}
运行结果:
Enter week(1-5)day(1-7)
2 3
10
3.数组指针与指针数组
(1)数组指针
定义方式:int (*p)[n]
()的优先级高与[],因此,p首先是一个指针,然后才是数组,即为指向一个整型的一维数组。

这个一维数组的长度是n,也可以说是p的步长。

也就是说执行p+1时,p要跨过n个整型数据的长度。

列如:
int a[3][4]; /*定义一个3x4大小的二维数组*/
int (*p)[4]; /*定义一个数组指针,指向含4个元素的一维数组*/
p = a; /*将该二维数组的首地址赋值给p*/
p++; /*p跨过行a[0][]指向了a[1][]
所以数组指针也称指向一维数组的指针,亦称行指针。

(2)指针数组
定义int *p[n];
[]的优先级比*高,因此,p首先是一个数组,其次是个指针。

可以理解为,数组p有n个元素,每一个元素都是一个指针变量,它的每个元素都可以指向一个整型变量。

列如:
int *p[3];
int a[3][4];
for(i=0;i<3;i++)
p[i] = a[i];
测试代码:
#include <stdio.h>
{
int *p[3];
int a[3][4];
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
a[i][j]=i+j;
}
}
printf("数组a:\r\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
for(i=0;i<3;i++)
{
p[i] = a[i];
}
for(i=0;i<3;i++)
{
printf("p[%d]:\n",i);
for(j=0;j<4;j++)
{
printf("%d ",*p[0]++);
}
printf("\n");
}
}
运行结果:
数组a:
0 1 2 3
1 2 3 4
2 3 4 5
p[0]:
0 1 2 3
p[1]:
1 2 3 4
p[2]:
2 3 4 5。

相关文档
最新文档