C语言程序设计-笔记7-指针
C语言程序设计-笔记7-指针
例8-1 利用指针模拟密码开锁游戏。
#include
int main(void)
int x=5342; //变量x用于存放密码值
int *p=NULL;
p=&x;
printf("If I know the name of the variable,\
I can get it's value by name:%d\n",x);
printf("If I know the address of the variable "
"is:%x,then I also can get it's value by address:%d\n",p,*p);
return 0;
注:printf换行的2种方式:\和””
例8-2 取地址运算和间接访问运算示例。
#include
int main(void)
int a=3,*p,x;
p=&a;
printf("a=%d,*p=%d\n",a,*p);
*p=10;
printf("a=%d,*p=%d\n",a,*p);
printf("Enter a:");
//scanf("%d",&a);
printf("a=%d,*p=%d\n",a,*p);
(*p)++;
printf("*a=%d,*p=%d\n",a,*p);
x=*p++;
printf("*a=%d,x=%d,*p=%d\n",a,x,*p);
printf("&a=%x,p=%x\n",&a,p);
return 0;
例8-3 角色互换。有两个角色分别用变量a和b表示。为了实现角色互换,现制定了3套方案,通过函数调用来交换变量a和b的值,即swap1()、swap2()和swap3()。请分析这3个函数中,哪个函数可以实现这样的功能。
#include
void swap1(int x,int y),swap2(int *px,int *py),swap3(int *px,int *py);
int main(void)
int a=1,b=2;
int *pa=&a,*pb=&b;
swap1(a,b);
printf("After calling swap1:a=%d b=%d\n",a,b);
a=1;b=2;
swap2(pa,pb);
printf("Afer calling swap2:a=%d b=%d\n",a,b);
a=1;b=2;
swap3(pa,pb);
printf("After calling swap3:a=%d b=%d\n",a,b);
return 0;
void swap1(int x,int y)
int t;
t=x;
x=y;
y=t;
void swap2(int *px,int *py)
int t;
t=*px;
*px=*py;
*py=t;
void swap3(int *px,int *py)
int *pt;
pt=px;
px=py;
py=pt;
例8-4 输入年份和天数,输出对应的年、月、日。要求定义和调用函数month_day(int year,int yearday,int *pmonth,int *pday),其中year是年,yearday是天数,pmonth和pday指向变量保存计算得出的月和日。例如,输入2000和61,输出2000-3-1,即2000年的第61天是3月1日。
#include
void month_day(int year,int yearday,int *pmonth,int *pday);
int main(void)
int day,month,year,yearday;
printf("input year and yearday:");
scanf("%d%d",&year,&yearday);
month_day(year,yearday,&month,&day);
printf("%d-%d-%d\n",year,month,day);
return 0;
void month_day(int year,int yearday,int *pmonth,int *pday)
int k,leap;
int tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
leap=(year%4==0 && year%100 !=0 )||year%400==0;
for(k=1;yearday>tab[leap][k];k++)
{
yearday-=tab[leap][k];
}
*pmonth=k;
*pday=yearday;
例8-5 冒泡排序。输入n(n10)个正整数,将它们从小到大排序后输出,要求使用冒泡排序算法。
#include
#define MAXN 10
void swap(int *px,int *py);
void bubble(int a[],int n);
int main(void)
int n,a[MAXN];
int i;
printf("Enter n(n<=10):");
scanf("%d",&n);
printf("Enter %d integers:",n);
for(i=0;i { scanf("%d",&a[i]); } bubble(a,n); printf("After sorted:"); for(i=0;i { printf("%3d",a[i]); } return 0; void bubble(int a[],int n) int i,j,t; for(i=1;i { for(j=0;j { if(a[j]>=a[j+1]) { swap(&a[j],&a[j+1]); } } } void swap(int *px,int *py) int t; t=*px; *px=*py; *py=t; 例8-6 输入正整数n(n),再输入n个整数作为数组元素,分别使用数组和指针来计算输出它们的和。 #include int main(void) int i,n,a[10],*p; long sum=0; printf("Enter n(n<=10):"); scanf("%d",&n); printf("Enter %d integers:",n);