C高级第5天

使用指针、数组名方式遍历二维数组

#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;
}

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值