现在的位置: 首页 > 综合 > 正文

指针练习实例–(针对C新手)(转)

2013年12月01日 ⁄ 综合 ⁄ 共 2550字 ⁄ 字号 评论关闭
作者:会说话的哑巴
最近有很多学习C的朋友问我关于指针的一些用法,现在通过一个程序来说明。
程序中我定义了几个子函数,通过各自的临时变量来依次说明指针的某一用法,希望能给大家以指导!

下面是源程序:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
void pointarray();
void arraypoint();
long *max(long a,long b);
void pointfun();
void funpoint();
void dobpoint();
void voidpoint();
void juge(int choic);
int main()
{
unsigned int choice;
printf("Training of Pointer /n");
printf("Written by talkingmute/n");
printf("QQ:13946698/n/n");
do
{
printf("/n 指针练习 /n");
printf("1--指针数组/n");
printf("2--数组指针/n");
printf("3--指针函数/n");
printf("4--函数指针/n");
printf("5--指针的指针/n");
printf("6--void类型指针/n");
printf("7--退出/n");
printf("请输入您的选择(1-7):");
scanf("%u",&choice);
juge(choice);
getch();
}
while(choice>=1&&choice<=7);
return 0;
}
void juge(int choic)
{
switch(choic)
{
case 1:
pointarray();break;
case 2:
arraypoint();break;
case 3:
pointfun();break;
case 4:
funpoint();break;
case 5:
dobpoint();break;
case 6:
voidpoint();break;
case 7:
exit(0);
default:
printf("输入错误/n");
}
}
void pointarray()
{

char *p[4]={"hello","world","rapture","city"};

printf("char *p[4]={hello,world,rapture,city}/n");
printf("按数组元素形式输入每个指针的值:/n");
getch();
for(unsigned int i=0;i<4;i++)
printf("p[%u]=%s/t",i,p[i]);
printf("/n");
}
void arraypoint()
{
int a[][3]={9,10,11,15,16,17};
int (*p)[3];
p=a;
printf("int a[][3]={9,10,11,15,16,17};/n");
printf("int (*p)[3];p=a;/n");
printf("用数组指针p来依次输出数组a的所有值:/n");
getch();
for(unsigned int i=0;i<2;i++)
{
for(unsigned int j=0;j<3;j++)
printf("*(*(p+%u)+%u)=%d/t",i,j,*(*(p+i)+j));
printf("/n");
}
}
long *max(long a,long b)
{
long *temp;
if(a>b)
temp=&a;
else
temp=&b;
return temp;
}
void pointfun()
{
printf("long *max(long a,long b)/n");
long at,bt,c;
long *p;
printf("输入a:");
scanf("%d",&at);
printf("输入b:");
scanf("%d",&bt);
p=max(at,bt);
printf("long *p;p=max(long a,long b);");
printf("(函数返回的指针变量赋给指针变量p.)/n");
getch();
printf("*p=%ld/t",*p);
printf("(*p)++=%ld",(*p)++);
printf("/n");
}
void funpoint()
{
int x;
printf("int abs(int x)/n");
int (*po)(int x);
po=abs;
printf("int (*po)(int x);po=abs;");
printf("(函数的地址赋给指针变量po.)/n");
printf("输入x:");
scanf("%d",&x);
printf("po(x)=%d/n",po(x));
printf("(*po)(x)=%d",(*po)(x));
printf("/n");
}
void dobpoint()
{
int i;
int *t;
int **p;
printf("int i;int *t;int **p;/n");
printf("输入i:");
scanf("%d",&i);
t=&i;
p=&t;
printf("t=&i;p=&t;(p为一个指向指针变量t的指针)/n");
getch();
printf("*t=%d,**p=%d,&t=%#x,p=%#x",i,i,&t,p);
printf("/n");
}
void voidpoint()
{
int *np;
int num;
printf("void *calloc(unsigned num, unsigned size)/n");
printf("输入num:");
scanf("%d",&num);
np=(int *)calloc(num,sizeof(int));
printf("int *np;np=(int *)calloc(num,sizeof(int));/n");
printf("(void指针需要经过强制类型转换才可以使用.)/n");
getch();
printf("int np[%d]={",num);
for(int i=0;i<num;i++)
{
np[i]=i*2;
printf("%d,",np[i]);
}
printf("}/n");
free(np);
}

【上篇】
【下篇】

抱歉!评论已关闭.