思维导图
练习1:使用指针实现两个字符串的比较【非函数实现】
#include <stdio.h>
int main(int argc, const char *argv[])
{
char str1[100],str2[100];
char *p=str1,*q=str2;
scanf("%s",p);
scanf("%s",q);
int i=0,ret;
while(*(p+i) == *(q+i) && *(p+i))
i++;
ret = *(p+i)-*(q+i);
printf("%d\n",ret);
return 0;
}
练习2:使用指针实现字符串连接【非函数实现】
#include <stdio.h>
int main(int argc, const char *argv[])
{
char str1[20] = "Hello ",str2[20] = "World";
char *p=str1,*q=str2;
printf("str1=%s\nstr2=%s\n",p,q);
while(*p)
p++;
while(*q)
*p++ = *q++;
*p = '\0';
printf("str1=%s\n",str1);
return 0;
}
练习3:使用指针实现字符串逆置【纯指针】
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char arr[100],t;
char *p1 = arr;
scanf("%s",p1);
char *p2 = p1 + strlen(arr) - 1;
printf("arr=%s\n",p1);
while(p1 < p2)
{
t = *p1;
*p1 = *p2;
*p2 = t;
p1++;
p2--;
}
p1=arr;
printf("arr=%s\n",arr);
return 0;
}
练习4:通过数组指针二维数组实现杨慧三角
#include <stdio.h>
#include <string.h>
#define N 10
int main(int argc, const char *argv[])
{
int arr[N][N]={0};
int (*p)[N] = arr;// p=arr
for(int i=0;i<N;i++)
*(*(p+i)) = 1;
for(int i=1;i<N;i++)
{
for(int j=1;j<=i;j++)
*(*(p+i)+j) = *(*(p+i-1)+j) + *(*(p+i-1)+j-1);
}
for(int i=0;i<N;i++)
{
for(int j=0;j<=i;j++)
printf("%d\t",*(*(p+i)+j));
printf("\n");
}
return 0;
}
练习5:通过数组指针实现二维数组转置
#include <string.h>
int main(int argc, const char *argv[])
{
int arr[2][3]={1,2,3,4,5,6},brr[3][2];
int (*p)[3]=arr,(*q)[2]=brr;
for(int i=0;i<2;i++)
for(int j=0;j<3;j++)
*(*(q+j)+i) = *(*(p+i)+j);
printf("arr\n");
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
printf("%d\t",*(*(p+i)+j));
printf("\n");
}
printf("brr\n");
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
printf("%d\t",*(*(q+i)+j));
printf("\n");
}
return 0;
}