使用指针、数组名方式遍历二维数组
#include <stdio.h>
int main(int argc, const char *argv[])
{
int arr[4][3]={
{1,2,3},
{11,12,13},
{21,22,23},
{31,32,33}
};
int (*ptr)[3]=arr;
printf("1行:%d %d %d\n",*(*ptr+0),*(*ptr+1),*(*ptr+2));
printf("2行:%d %d %d\n",*(*(ptr+1)+0),*(*(ptr+1)+1),*(*(ptr+2)+1));
for(int i=0;i<4;i++){
for(int j=0;j<3;j++){
//指针解引用
printf("[%d][%d] %2d\t",i,j,*(*(ptr+i)+j));
}
putchar(10);
}
printf("---------------\n");
for(int i=0;i<4;i++){
for(int j=0;j<3;j++){
//数组解引用 arr等价于ptr
printf("[%d] [%d] %d\t",i,j,*(*(arr+i)+j));
}
putchar(10);
}
printf("------------------\n");
for(int i=0;i<4;i++){
for(int j=0;j<3;j++){
//指针[]
printf("[%d] [%d] %d\t",i,j,ptr[i][j]);
}
putchar(10);
}
printf("------------------\n");
for(int i=0;i<4;i++){
for(int j=0;j<3;j++){
//数组名[]
printf("[%d] [%d] %d\t",i,j,arr[i][j]);
}
putchar(10);
}
return 0;
}
数组指针想在二维数组中访问元素:
数组指针是指向的一维数组的地址空间 int (*ptr)=arr
arr就是整个二位数组的首地址arr[0]这个数组
string函数族改写,用指针的方式。 strcmp strcat
strcmp封装函数
int strCompare(char* dest,char* scr){
char* a=dest;
char* b=scr;
int result;
while(1){
result=*a-*b;
if(result!=0){
break;
}
a++;
b++;
}
return result;
}
strcat封装函数
void strCat(char* dest,char* scr){
int len=strlen(dest);
char* a=dest+len;
char* b=scr;
while(1){
*a=*b;
if(*b=='\0'){
break;
}
a++;
b++;
}
printf("%s\n",dest);
}
主函数调用
int main(int argc, const char *argv[])
{
char str1[20]="fsijp";
char str2[20]="fsijpp";
int result=strCompare(str1,str2);
strCat(str1,str2);
printf("%d\n",result);
return 0;
}
运行结果
用指针的方式实现,输出一个十行的杨辉三角
#include <stdio.h>
int main(int argc, const char *argv[])
{
int n=10;
int a[10][10]={0};
int (*p)[10]=a;
for(int i=0;i<n;i++){
*(*(p+i)+0)=1;
for(int j=1;j<=i;j++){
*(*(p+i)+j)=*(*(p+i-1)+j-1)+*(*(p+i-1)+j);
}
}
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
printf("%2d ",a[i][j]);
}
putchar(10);
}
return 0;
}