一.上午培训内容
定义指针int*p,指针存放地址
#include<stdio.h>
int main()
{
int *p;
int a;
p=&a;
printf("%d ",p);
printf("%d ",*p); //解引用,输出的是储存的数据
}
指针就是整形数据,只能加减整形数据
整形指针只能表示整形变量的地址
地址是整形值
指针与指针之间不能进行运算
指针适用所有的数据类型
#include<stdio.h>
int main()
{
int a[4]={12,1,3,4};
int *p;
p=a;
printf("%d %d %d",p,*a,*(a+1));
}
对于一维数组,数组的名,可以作为整个数组的首地址
对于多维数组a[0]代表第一行数组的首地址
*(a+1)第二行的首地址
#include<stdio.h>
int main()
{
int a=2;
int *p1;
int **p2;
p1=&a;
p2=&p1;
printf("%d %d %d",p1,p2,*p1);
}
**p2是指针*p1的指针,用来查看*p1的地址存放到哪里
二.下午培训内容
//第一题:有5个字符串,首先将他们按照字符串中的字符个数由小到大排序
//再分别取每个字符串的第三个字母合并成新的字符串输出(若少于三个字符的输出空格)
//要求:利用字符串指针和指针数组实现
#include<stdio.h>
#include<string.h>
int main()
{
int i,j=0,k=0;
int s;
char c;
char a[50]={"*"};
char b[5][2]={"*"};
for(i=0;i<5;i++)
{
printf("请输入字符串: \n");
gets(a);
s=strlen(a);
b[i][0]=s;
b[i][1]=a[2];
}
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
{
if(b[i][0]>b[i+1][0])
{
for(k=0;k<2;k++)
{
c=b[i][k];
b[i][k]=b[i+1][k];
b[i+1][k]=c;
}
}
}
}
for(i=0;i<5;i++)
{
printf("%c ",a[i]=b[i][3]);
}
}
//第二题:字符替换,用函数replace将输入的字符串中的字符t(T)换成e(E)
//并返回替换字符个数
/*
#include<stdio.h>
#include<string.h>
int main()
{
char a[200]={"*"};
char b,c;
int i=0,j;
printf("请输入原字符串: \n");
gets(a);
j=strlen(a);
replace(a.begin(),a.end(),'e','t');
replace(a.begin(),a.end(),'E','T');
puts(a);
}
*/
//第三题:编写一个程序,输入星期,输出该星期的英文名。用指针数组处理
/*
#include<stdio.h>
int main()
{
int s;
char a[7][10]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
printf("输入星期:\n");
scanf("%d",&s);
printf("%s",*(a+s-1));
}
*/