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。
    int *p1;
    p1=a+1;
    cout<<*(p-2)<<endl;
    cout<<*p1<<endl;

}
时间: 2024-10-15 10:53:06

C/C++注 意数组后面的取地址符!!的相关文章

php的foreach中使用取地址符,注意释放

一说起这,就想到那次去360面试的面试题,当时毕竟图样,答错了哈哈~顺便说下,那时的技术面倒是通过了哈哈~ 先来举个例子,类似的面试题. 1 <?php 2 3 $array = array(1, 2, 3); 4 5 foreach ($array as &$value) {} 6 7 // unset($value); 8 9 foreach ($array as $value) { 10 // print_r($array); 11 } 12 13 echo implode($arra

浅谈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;

数组首地址取地址

一.问题来由 普通指针可被改动导致地址偏移: #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

数组名取地址以及数组名作为sizeof操作符的操作数

数组名取地址十分好玩,在这里记录一下,如果大家有不同见解,欢迎留言探讨: 在大多数情况下,数组名都会默认转换为指向数组的第一个元素的指针.这一点相信大家都知道.比如下边的例子:   int array[3] = {1,2,3};      cout << *array << endl;      cout << array[0] << endl; 上边的两个输出的值是相同的,这个时候array作为数组名默认转换为指向数组的第一个元素的指针.对数组名称进行解引

数组名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

关于C语言取地址运算符”&amp;“

关于C语言地址.取地址运算符"&" 2015-04-14  青岛  张俊浩 今天在论坛贴吧看到关于C语言运算符"&"的问题,因为之前自己学C语言时也遇到这个问题,就整理一下思路回帖,也顺便整理成一篇博客~ 问题如下: int a; scanf("%d",&a); 我们老师讲,&是取地址符,但是我就奇怪,为什么叫取地址? 我们明明是想知道a是多少,而不是说它在哪,地址不是形容一个事物在哪吗?我输个10,a就是10了.

对数组名取地址

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

C语言中对数组名取地址

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