指针与二维数组

指向数组名的指针加1和二维数组首地址相加1,以及二维数组里的一维数组首地址加1的理解。 

        因为后面要写C语言相关的题,挺久没有学习C语言了,发现对指针的感念变得很模糊,当初学指针的时候,觉得有些懵懵的感觉,所以现在重新缕一缕概念,相信有不少同学刚刚开始接触指针的时候多少会有点疑惑,所以我就跟大伙分享一下我的简单复习,写完以后,我觉得挺清楚的,希望对大家有所帮助吧。

         下面是我举了一个简单的指针和二维数组的例子。


// 复习一下指针内容 
//下面的指向即为存储 

#include<stdio.h>
#include<stdlib.h>


int main(void)
{
	int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

	int *p=a;  // *表明p是指针  将a赋值给p 
	p += 6;

	printf("&a %d\n", &a);  
    // 6487520  自己存自己的地址 他的值,即为它指向的地址 也就是他本身的地址 
	
	printf("*a %d\n", *a);   // 6487520  *a和 a[0]指向同一个地址 
	 
	printf("**a %d\n  ", **a);  // 0 *a和 a[0]指向同一个地址  **a就是这个地址的值 
	
	printf("*a[0] %d\n", *a[0]);  // 0 *a[0]也是*a的这个地址的值 即**a 
	
	printf("a[0][0] %d\n", a[0][0]);   // 0 &a[0][0]即*a的这个地址  即a[0][0]=**a 
	
	printf("*p %d\n", *p);  // 6 p指向a的值 即a[0] 所以p+=6 即a[0]+6 所以*p=*(a[0]+6)
	printf("*(a[0]+6) %d\n", *(a[0]+6)); // 6 
	
	printf("a+6 %d\n", a+6); // 6487616 比 6487520 多了 96个字节 
	 /* 地址相加,int地址之间隔4个字节,但他是二维数组的首地址 同时也是三个一维数组的首地址,
        他加的时候是一行一行的加的,也就是由第一个一维数组的首地址加到第二个一维数组的首地址,
        一维数组有4个元素,他加1相当于加一下子加了4个相邻地址之间的字节,1个相邻地址之间的字节为 
         4,4个相邻地址之间的字节为即为16,即加1相当于加了16个字节,加6相当于加了96个字节*/
	  
	printf("a[0]+6 %d\n", a[0]+6);  
	/* 6487544 比 6487520 多了24 a[0]是二维数组中一维数组的首地址,所以他是相邻地址之间的相加,            
      加6即加了24个字节*/
	
	printf("p %d\n", p); // 6487544 p指向a的值 即a[0] 所以p+=6 即a[0]+6

	printf("*(&a[0][0]+6) %d", *(&a[0][0]+6)); 
    // 6 &a[0][0]同样是相邻地址之间的相加,6即是储存在 地址相加后得到的地址中 
	
	return 0;
} 

        

如果有概念理解错误,还请小伙伴们指明,我会及时更正的,一起学习吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值