数组指针一些理解

		printf("%d",*p++);     //注意此处是先进行后面的运算p++; 
		printf("%d",*++p); 
		printf("%d\n",p[i]);   //此时指针就相当于数组名 
		printf("%-2d",(*p)++);//如果数组是a[6]={1,1,1,1,1} ,
      则应该打印{12345}
        printf("%-2d",a[0]++);//与上结果`
1 a 是数组首元素的地址,所以 a 的值和&a[0]的值相同,
另一方面,a[0]本身是 包含 4 个整数的数组,因此,
a[0]的值同其首元素的地址&a[0][0]相同。简单的 讲,
a[0]是一个整数大小对象的地址,而 a 是 4 个整数大小
对象的地址。因为整 数和 4 个整数组成的数组开始于同
一个地址,因此 a 和 a[0]的值是相同的。 
2, a 所指的对象大小是 4int,而 a[0]所指的对象大小一个 int,因此,a+1 和 a[0]+1 的结果是不同的。 
3,二维数组名解引用,降维为一维数组名。 *(a+1) <> a[1] 
4, 一维数组名,对其引用,升级为二维数组名。 &a[1] <> (a+1)5&引用和*解引用互为逆向关系。 此上的说法,不是很严紧,但是限于我们的知识面,当下是可以这样理解的。
     printf("%d",*(*(arr+2)+1)); //*arr->arr[0]相当于降  维 *(*(arr+2)+1)->arr[2][1] 
	  printf("%d",arr[2][1]); //A[n]===*(A+n)`相同 

1,指针就相当于地址常量
2,数组名就相当于一维指针,数组名又相当于首数组的地址

#include<stdio.h>
int main(void)
{
 int arr[3][4]={0};
 printf("arr[0]=%p  arr[1]=%p   arr[2]=%p\n",arr[0],arr[1],arr[2]);//一次跳动四个int 
 printf("========\n");
 printf("arr=%p   arr+1=%p  arr+2=%p\n",arr,arr+1,arr+2);
 printf("========\n");
 printf("*arr=%p   *arr+1=%p   *arr+2=%p\n",*arr,*arr+1,*arr+2);//解引用,相当于降维,一次跳一个int 
 printf("========\n");
 printf("arr=%p   arr+1=%p   arr+2=%p\n",&arr[0],&arr[0]+1,&arr[0]+2);
 /*
   arr[i][j ]
  (arr+i)第i行的地址
  *(arr+i)第i行第0列的地址
  *(arr+i) +j第 i行第j列的地址
  *(*(arr+i) +j)第i行第j列的 内容
 */
}

``![在这里插入图片描述](https://img-blog.csdnimg.cn/20200229172530994.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dhcm5pbmcxMg==,size_16,color_FFFFFF,t_70)
`

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值