指针的认识

#include <stdio.h>

int main()
{
	int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
	int (*p)[4],j=2;
	int i=1;


	printf("1\n");      //1
	p=a;
	printf("a[%d][%d]=%d \n",i,j,a[i][j]);
	printf("*(*(a+%d)+%d)=%d\n",i,j,*(*(a+i)+j));


	printf("\n2\n");    //2
	printf("*(*(p+%d)+%d)=%d\n",i,j,*(*(p+i)+j));
	printf("*(*(++p))=%d\n",*(*(++p)));
	
	printf("\n3\n");    //3
	//p=a;
	printf("*(p[%d]+%d)=%d\n",i,j,*(p[i]+j));
	printf("p[%d][%d]=%d\n",i,j,p[i][j]);


	printf("\n4\n");    //4
	p=a;
	printf("&p[1]=%d\n",&p[1]);
	printf("&a[1]=%d\n",&a[1]);
	printf("&(*(p+1))=%d\n",&(*(p+1)));


	printf("\n5\n");    //5
	printf("*(a+2)+3=%d\n",*(a+2)+3);
	printf("&(*(*(a+2)+3))=%d\n",&(*(*(a+2)+3)));
	printf("p[2][3]=%d\n",&p[2][3]);


	printf("\n6\n");    //6
	printf("a=%d\n",a);
	printf("p=%d\n",p);
	printf("&a=%d\n",&a);
	printf("&p=%d\n",&p);


	printf("\n7\n");    //7
	p=a+1;
	printf("p=%d\n",p);
	printf("&p=%d\n",&p);
	return 0;
}

指针是一个不同于普通变量的变量,首先说它和普通变凉的相同点:都可以储存值,都有一个内存地址,即自身地址是固定的const(eg:int *p,a[5],s;   &p 与&a都是固定的)


但指针p储存的是值是地址(是可变的),普通变量s,a[5]存的是数值,
eg:int *p;   *(++p)是合法的
   int a[6];  ++a是错误的


int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12,};
int  *p[4];
p=a;


p[2][3] 等价于a[2][3];


a=&a[0]=&a[0][0]=p=&p[0]=&p[0][0]=&(*p);
&a[1]=&(a+1)=&a[1][0]=&p[1]=&p[1][0]=&(*(p+1));
&a[2][3]=*(a+2)+3=&(*(*(a+2)+3))=*(p+2)+3=&(*(*(p+2)+3))=&p[2][3];


//看完这个就全懂了。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值