妈妈再也不用担心我搞不懂指针啦

指针的初始化

#include<stdio.h>
 main(){
 	int i=222;
 	int *p;
 	p=&i;
 	printf("*p=%d\n",*p);
 	printf("p=%d\n",p);
 	printf("&i=%d",&i);
 	   
 }

在这里插入图片描述
P为指针的名字,他是地址,故给P赋值时,应该用变量的地址。
在P前面加*,就可以得到地址所对应的值。

指针数组

可以直接对p执行指针算术运算来访问数组

#include<stdio.h>
 main(){
 	int a[10];
 	int *p;
 	for(int i=0;i<10;i++){
 		a[i]=i;
	 }
	p=&a[0];
	p++;
	p++;
	printf("%d",*p);  
 }

在这里插入图片描述

数组名做指针

在C中,数组名即为指向数组第一个元素的指针,但是该指针不能进行赋值。

#include<stdio.h>
 main(){
 	int a[10];
 	for(int i=0;i<10;i++){
 		a[i]=i;
	 }
	printf("%d",*a);  
 }

在这里插入图片描述

指针与多维数组

使用指针访问多维数组可以只使用一个循环

#include<stdio.h>
 main(){
 	int a[5][5];
 	int *p;
 	int x=0;
 	for(int i=0;i<5;i++){
 		for(int j=0;j<5;j++){
 			a[i][j]=x;
 			x++;
		 }
	 }
	 
	 for(p=&a[0][0];p<=&a[4][4];p++){
	 	printf("%d",*p);
	 }
	}

处理多维数组的行

int a[10][10]; 
int *p; p = &a[i][0]; 
// 此时p指向第i行 
// p 进行自增是按照 p 的类型 
// 此时 p 是 int 类型,自增 +1 实际地址 +4 
p = a[i]; 
//这样的写法也是合法的

处理多维数组的列

int a[10][12], (*p)[12], i; 
for (p = &a[0], p < &a[10]; p++){ 
		(*p)[i] = 0; 
	}
	// 此时 p 是一个指向长度为12整数数组的指针(单个指针) 
	// 如果写成 *p[12] 则是一个指针数组(数组) 
	// p++移动则是移动一整行

注意:
(*p)[12]——是一个指针,P指向一个长度为12的数组。
*p[12]——是一个数组,数组内部包含了12个指针,指向哪里不知道。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值