对数组取地址

看下面一段代码

    int a[]={1,2,3,4};
    int *ptr=(int*)(&a+1);
    cout <<*(ptr-1)<<endl;  

输出为4,这里&a是 int[4]*类型的,所以+1相当于地址加sizeof(int[4]),

总结,对于指针T* p,加1相等于地址加sizeof(T),所以关键是看好T的类型。

时间: 2024-11-07 23:50:32

对数组取地址的相关文章

浅谈C/C++数组取地址

本文讲的是关于C/C++数组取地址一些基本的概念,但是新手可能会在学习相关内容时产生一定的困惑,希望本文能帮助到你. 我们先来看以下一段代码: 1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int array[6] = { 1,2,3,4,5,'\0'}; 5 cout<<array<<endl; 6 cout<<&array<<endl; 7 return 0;

C语言对数组取地址

#include <stdio.h> main() { int a[5] = {1,2,3,4,5}; printf("a=%p\n" , a); printf("a=%p\n" , &a); printf("a=%p\n" , &a+1); int *ptr = (int*)(&a+1); printf("%d %d\n" , *(a+1), *(ptr-1)); } 大家先看如上代码.然

对数组名取地址

int a[5]={1,2,3,4,5}; int b[100]; 一个数组名代表的是数组中第一个元素的位置,通过数组名我们可以访问数组,先看下面两个问题 问题一:看到一篇文章这么写的..int array[10];int (*ptr)[10];ptr=&array;//这里说明&array是指向数组的指针,但为什么&array是指向数组的指针?答一:对数组名取地址在C标准里面是未定义的行为.由于数组名是右值,而&操作符要求操作数具有具体的内存空间,换言之就是一个变量,因此

数组首地址取地址

一.问题来由 普通指针可被改动导致地址偏移: #include <iostream> using namespace std; int main(int argc,char *argv[]) { int a = 6; int *p = &a; //p存放一个地址.pp存放p的地址,上面的代码能够让p存放的地址偏移 cout<<&a<<endl; int *pp = (int *)&p; cout<<p<<endl; (*p

C语言的数组名和对数组名取地址

http://blog.csdn.net/zdcsky123/article/details/6517811 相信不少的C语言初学者都知道,数组名相当于指针,指向数组的首地址,而函数名相当于函数指针,指向函数的入口地址.现在又这样一个问题,如果对数组名取地址,那得到的会是什么呢?很多人立刻会想到:给指针取地址,就是指针的指针,既二级指针嘛!当然这样的结论是错误的,不然这篇笔记也就没有意义了. 下面我们来逐步分析,下面是一段验证这个问题的代码 Code: #include<stdio.h> in

C语言中对数组名取地址

在C/C++中,数组名相当于一个指针,指向数组的首地址.这里"相当于"不代表等于,数组名和指针还是有很多区别的,这个在<C陷阱与缺陷>里有详尽的讲述.而这里要说的是对于数组名取地址的这么一个操作. 如果声明有如下数组: int arr[5]; 那么,&arr这个操作得到了什么值呢? 如果简单的认为arr就是一个指向数组首地址的指针的话,那么很自然会想到&arr得到的是一个指向存放arr这个指针的指针,也就是一个二级指针,然而事实却并不是这样. 观察以下代码:

C语言对数组名取地址

你有没有想过,对一个一维数组名取地址,然后用这个地址进行加减运算.这会出现什么样的结果呢? 示例: int a[5] = {1,2,3,4,5}; int *p = (int *)(&a+1); printf("%d\n",*(p-1)); 这个输出会是多少呢? 咦?为什么第二行需要强制转化类型呢? 答:a是一个一维数组的名字,&a相当于一个指向一维数组的指针.怎么感觉这么熟悉?指向数组的指针,那不就是行指针吗?int (*p)[]. 行指针+1,就是对指针进行加减操作

C语言 对数组名取地址

作者 : 卿笃军 你有没有想过,对一个一维数组名取地址,然后用这个地址进行加减运算.这会出现什么样的结果呢? 示例: int a[5] = {1,2,3,4,5}; int *p = (int *)(&a+1); printf("%d\n",*(p-1)); 这个输出会是多少呢? 咦?为什么第二行需要强制转化类型呢? 答:a是一个一维数组的名字,&a相当于一个指向一维数组的指针.怎么感觉这么熟悉?指向数组的指针,那不就是行指针吗?int (*p)[]. 行指针+1,就是

C/C++注 意数组后面的取地址符!!

#include<iostream> #define Min(a,b) (a>b?b:a) using namespace std; int main() { int a[5]={1,2,3,4,5}; int *p=(int *)(&a+1);//本身数组名就是地址了,也就是数组名就是指针,>取数组的地址,也就是取指针的地址,即p为指向数组的指针(指针的指针),当&a+1,p指向的其实是数组末尾5后面的地址,当p-1,往回退一格回到数组的末尾,>即5. in