C程序设计
----教学过程篇指针小结
指针的各种定义
int *p,p为指向整形数据的指针变量
int *p[n],定义指针数组 p,它由 n个指向整形数据的指针元素组成
int (*p)[n],p为指向含 n个元素的一维数组的指针变量
int *p(),p为返回一个指针的函数,该指针指向整形数据指针小结
int (*p)(),p为指向函数的指针,该函数返回一个整形值
int **p:p是一个指针变量,它指向一个指向整形数据的指针变量指针小结
指针的运算
p++
p—
p+I
p-I
p+=I
p-=I
了解上述运算的含义指针小结
指针变量的赋值将一个变量地址赋给一个指针变量
p=&a; (将变量 a的地址赋值给 p)
p=array; (将数组 array的首地址赋值给 p)
p=&array[i]; (将数组 array的某元素地址赋值给 p)
p=max; (将 max函数的入口地址赋值给 p)
p1=p2; (将一个指针变量的地址赋给另一个 )
指针小结
指针变量可以为空值,即该指针变量不指向任何变量表示为,p=null;
其中 null实际上就是整数 0
一般说来通常在程序开头预定义的时候将 null定义为 0
如:
#define null 0
指针小结
两个指针变量可以相减如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素的个数两个指针变量比较若两个指针指向同一个数组的元素,
则可以进行比较,如果两指针不是指向同一个数组,则无法比较指针小结
Void指针类型即可定义一个指针变量,但不指定它是指向哪一种类型数据的,在将它的值赋给另一指针变量时要进行强制类型转换使之适合于被赋值的变量类型如:
char *p1;
void *p2;
p1=(char *)p2;
指针小结 (程序一 )
使用 void指针类型的函数
#include <stdio.h>
#include <stdlib.h>
void *fun(int x,int y)
{
if(x>=y)
{
return(&x);
}
指针小结 (程序一 )
else
{
return(&y);
}
}
main()
{
int x,y;
int *p;
指针小结 (程序一 )
scanf("%d%d",x,y);
p=(int *)fun(x,y);
printf("the max number is %d,\n",*p);
system("pause");
}
指针小结 (程序二 )
P259 T18
#include <stdio.h>
#include <stdlib.h>
main()
{
int *p,i=0;
int week[12];
for(p=week;p<week+12;p++)
{
*p = ++i;
指针小结 (程序二 )
}
scanf("%d",&i);
switch(i)
{
case 1,printf("January\n"); break;
case 2,printf("February\n"); break;
case 3,printf("March\n"); break;
case 4,printf("April\n"); break;
case 5,printf("May\n"); break;
case 6,printf("June\n"); break;
指针小结 (程序二 )
case 7,printf("July\n"); break;
case 8,printf("Agust\n"); break;
case 9,printf("Septemper\n");break;
case 10:printf("October\n"); break;
case 11:printf("November\n"); break;
case 12:printf("December\n"); break;
}
system("pause");
}
指针小结
指针的使用非常灵活,熟练的使用可以编写出很多优秀的程序,但是指针也十分容易出现错误,并且难于发现,使用的时候要格外谨慎
----教学过程篇指针小结
指针的各种定义
int *p,p为指向整形数据的指针变量
int *p[n],定义指针数组 p,它由 n个指向整形数据的指针元素组成
int (*p)[n],p为指向含 n个元素的一维数组的指针变量
int *p(),p为返回一个指针的函数,该指针指向整形数据指针小结
int (*p)(),p为指向函数的指针,该函数返回一个整形值
int **p:p是一个指针变量,它指向一个指向整形数据的指针变量指针小结
指针的运算
p++
p—
p+I
p-I
p+=I
p-=I
了解上述运算的含义指针小结
指针变量的赋值将一个变量地址赋给一个指针变量
p=&a; (将变量 a的地址赋值给 p)
p=array; (将数组 array的首地址赋值给 p)
p=&array[i]; (将数组 array的某元素地址赋值给 p)
p=max; (将 max函数的入口地址赋值给 p)
p1=p2; (将一个指针变量的地址赋给另一个 )
指针小结
指针变量可以为空值,即该指针变量不指向任何变量表示为,p=null;
其中 null实际上就是整数 0
一般说来通常在程序开头预定义的时候将 null定义为 0
如:
#define null 0
指针小结
两个指针变量可以相减如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素的个数两个指针变量比较若两个指针指向同一个数组的元素,
则可以进行比较,如果两指针不是指向同一个数组,则无法比较指针小结
Void指针类型即可定义一个指针变量,但不指定它是指向哪一种类型数据的,在将它的值赋给另一指针变量时要进行强制类型转换使之适合于被赋值的变量类型如:
char *p1;
void *p2;
p1=(char *)p2;
指针小结 (程序一 )
使用 void指针类型的函数
#include <stdio.h>
#include <stdlib.h>
void *fun(int x,int y)
{
if(x>=y)
{
return(&x);
}
指针小结 (程序一 )
else
{
return(&y);
}
}
main()
{
int x,y;
int *p;
指针小结 (程序一 )
scanf("%d%d",x,y);
p=(int *)fun(x,y);
printf("the max number is %d,\n",*p);
system("pause");
}
指针小结 (程序二 )
P259 T18
#include <stdio.h>
#include <stdlib.h>
main()
{
int *p,i=0;
int week[12];
for(p=week;p<week+12;p++)
{
*p = ++i;
指针小结 (程序二 )
}
scanf("%d",&i);
switch(i)
{
case 1,printf("January\n"); break;
case 2,printf("February\n"); break;
case 3,printf("March\n"); break;
case 4,printf("April\n"); break;
case 5,printf("May\n"); break;
case 6,printf("June\n"); break;
指针小结 (程序二 )
case 7,printf("July\n"); break;
case 8,printf("Agust\n"); break;
case 9,printf("Septemper\n");break;
case 10:printf("October\n"); break;
case 11:printf("November\n"); break;
case 12:printf("December\n"); break;
}
system("pause");
}
指针小结
指针的使用非常灵活,熟练的使用可以编写出很多优秀的程序,但是指针也十分容易出现错误,并且难于发现,使用的时候要格外谨慎