//指针
/*
#include<stdio.h>
void main()
{
int a;
int *pa=&a;
a=10;
printf("%d %d %d %d %d \n",a,*pa,&a,pa,&pa);
}
*/
//交换指针变量的值
//例子:输入三个数,按从大到小输出,地址传递
/*
#include<stdio.h>
void cmp(int *p1,int *p2);
void main()
{
int a,b,c;
int *point_1,*point_2,*point_3;
scanf("%d %d %d",&a,&b,&c);
point_1=&a;
point_2=&b;
point_3=&c;
cmp(point_1,point_2);
cmp(point_1,point_3);
cmp(point_2,point_3);
printf("%d %d %d ",a,b,c);
}
void cmp(int *p1,int *p2)
{
int p;
if(*p1<*p2)
{p=*p1; *p1=*p2; *p2=p; }
}
*/
//指针变量的运算
/*
#include<stdio.h>
void main()
{
int a[]={5,8,7,6,2,7,3};
int y,*p=&a[1];
y=(*--p)++; //先运算(*--p)=a[0] 输出y=5 运算之后a[0]++,即5++ a[0]=6
printf("%d ",y); // y=5
printf("%d ",a[0]); //a[0]=6
}
*/
//注意指针的当前值 数组越界,指针变量可以指到数字后的内存单元,会输出乱码
/*
#include<stdio.h>
void main()
{
int i,*p,a[7];
p=a;
for(i=0;i<7;i++)
scanf("%d",p++);
printf("\n");
//p=a; //加此行修改
for(i=0;i<7;i++,p++)
printf("%d ",*p);
}
*/
//将数组a中的n个整数按相反顺序存放 answer1 实参与形参均用数组名
/*
#include<stdio.h>
void inv(int x[], int n)
{ int t,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{ j=n-1-i;
t=x[i]; x[i]=x[j]; x[j]=t;
}
}
void main()
{ int i,a[10]={3,7,9,11,0,6,7,5,4,2};
inv(a,10);
printf("The array has been reverted:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
}
*/
//例 3个学生各学4门课,查找一门以上课程不及格学生, 输出其各门课程的成绩
/*
#include<stdio.h>
void search(float (*p)[4],int n);
void main( )
{float score[3][4]={{65,55,79,60},{80,87,90,81},{50,99,100,98}};
search(score,3);
}
void search(float (*p)[4], int n)
{ int i,j,flag;
for(j=0;j<n;j++)
{ flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60) flag=1;
if(flag==1)
{ printf("No.%d is fail,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%5.1f ",*(*(p+j)+i));
printf("\n");
}
}
}
*/
//危险!!!! 不能把形参或局部变量的地址作函数返回值
/*
#include<stdio.h>
int *f1(int x,int y)
{
if(x>y)
return &x;
else
return &y;
}
void main()
{ int a=2,b=3;
int *p;
p=f1(a, b);
printf("%d\n",*p);
}
*/
/*
#include<stdio.h>
void main()
{
int a;
int *pa=&a;
a=10;
printf("%d %d %d %d %d \n",a,*pa,&a,pa,&pa);
}
*/
//交换指针变量的值
//例子:输入三个数,按从大到小输出,地址传递
/*
#include<stdio.h>
void cmp(int *p1,int *p2);
void main()
{
int a,b,c;
int *point_1,*point_2,*point_3;
scanf("%d %d %d",&a,&b,&c);
point_1=&a;
point_2=&b;
point_3=&c;
cmp(point_1,point_2);
cmp(point_1,point_3);
cmp(point_2,point_3);
printf("%d %d %d ",a,b,c);
}
void cmp(int *p1,int *p2)
{
int p;
if(*p1<*p2)
{p=*p1; *p1=*p2; *p2=p; }
}
*/
//指针变量的运算
/*
#include<stdio.h>
void main()
{
int a[]={5,8,7,6,2,7,3};
int y,*p=&a[1];
y=(*--p)++; //先运算(*--p)=a[0] 输出y=5 运算之后a[0]++,即5++ a[0]=6
printf("%d ",y); // y=5
printf("%d ",a[0]); //a[0]=6
}
*/
//注意指针的当前值 数组越界,指针变量可以指到数字后的内存单元,会输出乱码
/*
#include<stdio.h>
void main()
{
int i,*p,a[7];
p=a;
for(i=0;i<7;i++)
scanf("%d",p++);
printf("\n");
//p=a; //加此行修改
for(i=0;i<7;i++,p++)
printf("%d ",*p);
}
*/
//将数组a中的n个整数按相反顺序存放 answer1 实参与形参均用数组名
/*
#include<stdio.h>
void inv(int x[], int n)
{ int t,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{ j=n-1-i;
t=x[i]; x[i]=x[j]; x[j]=t;
}
}
void main()
{ int i,a[10]={3,7,9,11,0,6,7,5,4,2};
inv(a,10);
printf("The array has been reverted:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf("\n");
}
*/
//例 3个学生各学4门课,查找一门以上课程不及格学生, 输出其各门课程的成绩
/*
#include<stdio.h>
void search(float (*p)[4],int n);
void main( )
{float score[3][4]={{65,55,79,60},{80,87,90,81},{50,99,100,98}};
search(score,3);
}
void search(float (*p)[4], int n)
{ int i,j,flag;
for(j=0;j<n;j++)
{ flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60) flag=1;
if(flag==1)
{ printf("No.%d is fail,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%5.1f ",*(*(p+j)+i));
printf("\n");
}
}
}
*/
//危险!!!! 不能把形参或局部变量的地址作函数返回值
/*
#include<stdio.h>
int *f1(int x,int y)
{
if(x>y)
return &x;
else
return &y;
}
void main()
{ int a=2,b=3;
int *p;
p=f1(a, b);
printf("%d\n",*p);
}
*/