数组的地址+1 和 指向数组的指针+1 区别

定义了数组a[8],其中a,&a,&a[0]都是数组的起始地址。但是步长有区别,也就是指向的类型不同

a等同于a+0等同于&a[0],是指向数组第一个元素的指针,步长为指向的元素所占用的地址空间为sizeof(int) 。

&a也是指向数组第一个元素的指针,但其意义是指向整个数组的首地址,指向的类型为整个数组,所以其步长为8*sizeof(int)

而ptr指,针指向的是数组的是首地址,所以*(ptr-1)的值是8

即输出的结果是8

#include <stdio.h>
#include <stdlib.h>
#define MAX(a,b,c) ((a+b)>c)?1:0
int main()
{
     int a[8]={1,2,3,4,5,6,7,8};
     int *ptr=(int*)(&a+1);
     printf("%d %d %d %d %d %d\n",a,&a,&a[0],a+1,&a+1,&a[0]+1);
     printf("%d  %d\n",*(ptr-1),*ptr);
    return 0;
}

原文地址:http://blog.51cto.com/9409270/2103112

时间: 2024-10-16 10:49:28

数组的地址+1 和 指向数组的指针+1 区别的相关文章

数组名a、数组名取地址&amp;a、数组首地址&amp;a[0]、数组指针*p

本文链接:https://blog.csdn.net/loongkingwhat/article/details/78910921 数组和指针向来就是傻傻分不清,当他们一起出现的时候就更加懵逼. 1 解析不同变量之间的区别: 数组名a: 数组名可以作为数组第一个元素的指针.我们由数组和指针的关系知道,a代表这个地址数值,它相当于一个指针,指向第一个元素(&a[0]),即指向数组的首地址.数组中的其他元素可以通过a的位移得到,此时的进阶是以数组中单个的元素类型为单位的,即a+i= & a[i

数组--存储地址的计算

一维数组存储地址的计算 假设数组的首位置是:a 每个元素所占空间为:len 则,可以推断出a[i]的地址是:a+i*len 二维数组按行存储a[3][5] 假设数组的首位置是:a 每个元素所占空间为:len 则,可以推断出a[i]i[j]的地址是:a+i*n*len+j*len 二维数组按列存储 假设数组的首位置是:a 每个元素所占空间为:len 则,可以推断出a[i]i[j]的地址是:a+i*m*len+i*len 原文地址:https://www.cnblogs.com/excellence

指针数组和数组指针的区别

数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的长度. 如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组. p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++;       //该语句执行过后,也就是p=p+

char[]数组与char *指针的区别

char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了.由于string涉及的内容很多,因此本文中就先不整理了,对char[]和 char *进行了一个整理,原理可能还是不太明白,但至少印象深刻了很多. 整型数组和整型指针 在讨论字符数组.字符指针以及字符串之前,先看下整型数组与整型指针的区别 int a[]={1,2,3};//整型数组,a的指向不能

a和&amp;a的区别、二维数组的本质及多维数组

1 a和&a的区别 int a[10] = {1,2};//其他初始化为0 a代表数组首元素的地址,不是整个数组的地址 &a表示整个数组的地址 &a,a代表的数据类型不一样 &a数组类型int[10] a 数组首元素的类型 2 数组指针的用法 int i=0;//循环变量 int a [5] = {3, 4, 5, 6, 2}; //直接定义一个数组指针 int (*p)[5] = &a; for (i=0; i<5; i++) { printf("

JavaSE基础知识(4)—数组的应用(4.2数组的基本及高级使用)

  功能 代码 功能 代码 基本使用 正序打印 for(int i=0;i<arr.length;i++){ System.out.println(arr[i]);} 倒序打印 for(int i=arr.length-1;i>=0;i--){ System.out.println(arr[i]);} 求和.求平均 int sum = 0;for(int i=0;i<arr.length;i++){ sum+=arr[i];}和:sum平均值:sum/arr.length 查找 int

【C语言】-返回指针的函数与指向函数的指针

本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 回到顶部 前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如指针数组.指向数组的指针.指向指针的指针,呵呵,看到这些名字是否

【C语言】14-返回指针的函数与指向函数的指针

前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如指针数组.指向数组的指针.指向指针的指针,呵呵,看到这些名字是否都觉得头大了,不过我就暂时不在博客中讲解这些内容了,我只讲述在iOS开发中指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 回到顶部 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯

C语言 14-返回指针的函数与指向函数的指针

本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略. 前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如指针数组.指向数组的指针.指向指针的指针,呵呵,看到这些名字是否都觉得头