栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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


int main(int argc, char *argv[]) {
	
	
	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;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/933946.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号