c语言语法基础之——指针( 多维数组、函数、总结 ) 学习

普通指针:

二维数组,一般是几行几列;
如多定义一个普通指针的话,此指针只代表第几行的地址,而不是某个元素地址,比如:
	int a[3][3]={1,2,3,4,5,6,7,8,9};
	int *p;
	p=a; // 
	printf("%d\n",*p); // 1  第一行第一列的元素值 
	p=a+1;
	printf("%d\n",*p); // 4 第二行第一列的元素值 

可以定义一个指定地址的指针:
	int a[3][3]={1,2,3,4,5,6,7,8,9};
	int *p;
	p=&a[1][1]; // 第二行第二列元素的地址  
	printf("%d\n",*p); // 5  第一行第一列的元素值 
	p++;
	printf("%d\n",*p); // 6 第二行第三列的元素值 
	p=a+1; // 第二行 
	printf("%d\n",*p); // 4 第二行第一列的元素值 


在这里插入图片描述

在这里插入图片描述

int main(int argc, char *argv[]) {
	/*
	
	 1
	 2 1
	 3 2 1
	 4 3 2 1
	 5 4 3 2 1
	 
	*/
	
	int a[5][5];
	int i,j;
	for(i=0;i<5;i++){
		for(j=0;j<5;j++){
//			a[i][j]=i-j+1; // 非指针版 
			*(a[i]+j)=i-j+1; // 指针版 
			*(*(a+i)+j)=i-j+1; // 指针版 

			if(i>=j){
//				printf(" %d", a[i][j]); // 非指针版 
//				printf(" %d", *(a[i]+j)); // 指针版 
				printf(" %d", *(*(a+i)+j)); // 指针版 

			}
		}
		printf("\n");
	}
	
	
	return 0;
}

数组指针:

定义行指针(数组指针):就可以使用*(*(p+i)+j,否则报错,只能用*(*(a+i)+j
int a[3][3]={1,2,3,4,5,6,7,8,9};
int (*p)[3]; // 数组的行指针

在这里插入图片描述
在这里插入图片描述

数组的几种指针运算:

在这里插入图片描述
注意图中的是逗号,执行顺序是从右到左的,如果是逗号改成乘号,是从左到右的

int a[]={1,2,3},y,*p=&a[2];
y=*--p;
y的值: 2  
逻辑:p刚开始指向下标为2的地址,先--,移动到下标为1,然后*取值,下表为1的地址处,值是2


int a[]={1,2,3,4,5,6},*p=a;
*p++ * *++p 的值是:3
逻辑:乘号,是从左往右执行,*p=1,然后指针加1,在执行++p,指针在加1,然后再取*++p=3 , 最后 1*3=3


函数指针:

int max(int a, int b){}
int (*p)()
max(a,b) --> (*p)(a,b)

指针数组:

定义:
每一个下标变量都是一个指针变量,是一个地址,主要用于处理变长多字符串。

理解:指针数组和之前的数组指针完全不是一个概念,指针数组特殊在所有元素都是一个地址

样式:
int *b[3]={ a,&a[1] }
在这里插入图片描述

指针总结:

在这里插入图片描述

// 圆的面积 

double area(int r){
	return 3.14*r*r;
}


int main(int argc, char *argv[]) {
	double (*p)(); // 注意类型必须要和函数类型一致,如果函数是double,这里是int,结果会变成 4199728.00000 
	p=area;
	int i=2;
	double result;
	result=(*p)(i);
	printf("%f",result); // 12.560000 

	
	return 0;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坦桑尼亚奥杜威峡谷能人

感谢您的认可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值