指针
这里是笔者花费数日编写的初学者认识指针的程序免费粘贴,拿去试试吧
不多说了,上车吧!开启你的学习之路!
指针走起
在这里插入代码片
``
#include<iostream>
#include<string.h>
using namespace std;
int a,b,*p=NULL;
int *p1=&a,*p2=&b;
void yi();//-------------指针自加
void er();//-------------指针运算
void sa();//-------------指针指向转换
void si();//-------------指针递推
void zifu1();//----------指针输入输出
void zifu2(); //---------指向数组的指针
void zifu3();//---------- 计算长度
void zifu4();//---------- 指针转换赋值
void shuzu1(); //--------矩阵输出
void hangzhizhen();//----加和
void zifushuzu();//------排序
void twzhizhen();//------二阶指针
void zhi_han(); //----------------指针与函数 (求函数最大值)
float max_array(float *a, int n);//所需函数
int main()
{
//cin>>a>>b;
//yi();
//er();
//sa();
//si();
//zifu2();
//zifu3();
//zifu4();
//shuzu1();
//hangzhizhen();
//zifushuzu();
//twzhizhen();
zhi_han();
}
void san()
{
if(a<b)
{
p=p1; //指针的指向变了,而a,b的值不变
p1=p2;
p2=p;
}
cout<<"a="<<a<<" b="<<b<<endl;
cout<<"&a="<<&a<<" &b="<<&b<<"\n";
cout<<"p1="<<*p1<<" p2="<<*p2<<endl;
}
void yi()
{
(*p1)++;
*p2++; //作用一样
cout<<"a="<<a<<" b="<<b<<endl;
cout<<"&a="<<&a<<" &b="<<&b<<"\n";
cout<<"p1="<<*p1<<" p2="<<*p2<<endl;
}
void er()
{
*p1=a+2;
*p2+=2; //作用相同
cout<<"a="<<a<<" b="<<b<<endl;
cout<<"&a="<<&a<<" &b="<<&b<<"\n";
cout<<"p1="<<*p1<<" p2="<<*p2<<endl;
}
void si()
{
p1+=1; //指针指向下一位
cout<<"a="<<a<<" b="<<b<<endl;
cout<<"&a="<<&a<<" &b="<<&b<<"\n";
cout<<"p1="<<*p1<<" p2="<<*p2<<endl;
}
void shu1()
{
int x[3],i;
for(i=0;i<3;i++)
{
//cin>>x+i; //cin不可用
scanf("%d",x+i);
//cout<<*(x+i);
printf("%d ",*(x+i));
}
}
void shu2()
{
int x[3],i;
int *y=x;
for(i=0;i<3;i++)
{
scanf("%d",y);
printf("%d ",*y);
y++; //指针自动指向下一个
}
}
void zifu3()
{
char *s="China"; //注意字符串指针的定义
int len =0;
printf("字符串是\"%s\"",s);//注意输出
while(*s!='\0')
{
len++;
s++;
}
printf("的长度是%d\n",len);
}
void zifu4()
{
char *s="China";
s="Beijing"; //指针可以多次赋值 ,字符数组不行
char str[]="China";
*str='A'; //字符数组可改变数组元素,指针不可以
printf("指针是\"%s\"\n",s);
printf("字符数组是\"%s\"\n",str);
}
void shuzu1()
{
int num,max=0;
int a[11][11];
int *p;
scanf("%d",&num);
printf("%d",num);
for(int i=0;i<num;i++) //输入的操作,
{
for(p=a[i];p<&a[i][num];p++)
scanf("%d",p); //不写指针符
}
printf("方阵是;\n");
for(int i=0;i<num;i++)
{
for(p=a[i];p<&a[i][num];p++)
{
printf("%3d",*p); //必写指针符
if(max<*p) max=*p;
}
printf("\n");
}
printf("max=%d\n",max);
}
void hangzhizhen()
{
int b[2][3]={{1,2,3},
{4,5,6}};
int sum;
int (*q)[3]=b; //--------------------------行指针定义
for(int i=0;i<2;i++)
{
sum=0;
printf("第%d行(",i+1);
for(int j=0;j<3;j++)
{
printf(" %d",*(*q+j));//------------输出指针字符
sum+=*(*q+j);//---------------------运算指针
}
printf(")的行和是;%d\n",sum);
q++;
}
}
void zifushuzu()
{
char *name[]={"Follow me","Come on","My pleasure","Interesting","Morning"};
char *temp;
int k;
for(int i=0;i<4;i++)
{
k=i;
for(int j=i+1;j<5;j++)
if(strcmp(name[k],name[j])>0) k=j;
if(k!=i)
{
temp=name[k];
name[k]=name[i];
name[i]=temp;
}
}
for(int i=0;i<=5;i++)
printf("%s\n",name[i]);
}
void twzhizhen()
{
char *name[]={"Follow me","Come on","My pleasure","Interesting","Morning",};
char ** two=name;
int i,j,k;
while(*two)
{
for(i=0;*(*two+i);i++)
printf("%c",*(*two+i));
printf("\n");
two++;
}
}
void zhi_han()
{
//printf("请输入%d个实数:\n",&N)
int i;
float array[10],max;
for(i=0;i<10; i++)
scanf("%f",&array[i]);
max=max_array(array,10);//------------------/*函数调用*/
printf("数组中最大元素是:%.2f\n",max);
}
float max_array(float *a, int n)//---------大函数定义*/
{
int i;
float max;
max=*a;
for(i=1; i<n; i++)
if(*(a+i)>max) max=*(a+i);
return max;
}