数组名

#include <iostream>
using namespace std;
int main()
{
    int a[3] = {1, 2, 3};
    cout << *(a) << std::endl;
    cout << *(a+ 1) << std::endl;
    cout << *(a + 2) << std::endl;

    cout << *(&a[0] + 0) << std::endl;
    cout << *(&a[0] + 1) << std::endl;
    cout << *(&a[0] + 2)  << std::endl;

    int addr = (int)a;//直接用地址操作
    cout << *(int*)addr << endl;
    cout << *(int*)(addr+ 4) << endl;
    cout << *(int*)(addr+8) << endl;
    getchar();
    return 0;

    //可以看出数组名a的值就是&a[0],代表了第一个元素的首地址,+1直接访问下一个元素的
} 
时间: 2024-11-05 14:40:48

数组名的相关文章

对数组名取地址

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

数组名的理解

数组名的再理解 先看下面的这段代码,程序会输出什么结果? #include <stdio.h> int main() { int a[5] = {1, 2, 3, 4, 5}; int *p = (int *)(&a+1); printf("%d %d\n", *(a+1), *(p-1)); return 0; } 答案详见本文的最后. 先来一步步分析一下数组名到底是什么,首先看一下下面这段代码: #include <stdio.h> int main

C语言之数组名的含义

一:一维数组 int a[5]; a:就是数组名.a做左值时表示整个数组的所有空间(10×4=40字节),又因为C语言规定数组操作时要独立单个操作,不能整体操作数组,所以a不能做左值:a做右值表示数组首元素(数组的第0个元素,也就是a[0])的首地址(首地址就是起始地址,就是4个字节中最开始第一个字节的地址).a做右值等同于&a[0]; a[0]:表示数组的首元素,也就是数组的第0个元素.做左值时表示数组第0个元素对应的内存空间(连续4字节):做右值时表示数组第0个元素的值(也就是数组第0个元素

C语言中对数组名取地址

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

数组名与函数的结合使用注意项

数组名即数组的首地址,故数组名属于指针变量,在定义函数使数组名作为形参时,要把对应的参数定义为指针变量.因为数组没有特定的使其读入停止的标志,因此还要有确定数组长度的参数,即用户自己输入数组长度. 代码如下: # include <stdio.h> void f (int *x,int len) { int i; for(i=0;i<len;i++) printf("%d  ",*(x+i)); //输出时要用*(x+i),不能直接用main函数中的数组名(数组名不确

第六章 数组名与指针

指针的算术运算符是指针和数组之间的一种关联,但不是唯一关联: 可以使用数组名作为指向数组第一个元素的指针,但是不可以给数组名赋新的值. //如下声明a int a[10]; //用a作为指向数组第一个元素的指针,可以修改a[0]; *a = 11; //通过a + 1来访问a[1]; *(a + 1) = 22; 但是试图使数组名指向其他地方是错误的: #include <stdio.h> int main() { char arr[] = "yangxunwu"; whi

C 语言中的左值和右值。以及对比数组名和指针取数组元素的区别。

左值:出现在赋值符左边的符号有时称为左值. 右值:出现在赋值符右边的符号有时称为右值. 编译器为每个变量分配一个地址(左值),这个地址在编译时可知,而且该变量在运行时一直保存于这个地址.相反,存储于变量中的值(它的右值)只有在运行时才可知.如果需要用到变量中存储的值,编译器就发出指令从指定地址读入变量值并将它存于寄存器. 可以看到,每个符号的地址在编译时可知. 对比一下几个式子: //常规变量 int a=1;//这里a作为左值出现,代表的是地址,即在a表示的这个内存地址存入数值1.即a代表的内

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语言-&gt;数组名与指针

以下内容转自: http://bbs.csdn.net/topics/390733584 感觉对自己有用,收藏了.如果转帖,请注明如上出处.多谢! 看到一篇关于C语言指针的文章,正好最近在看<C和指针>就去看了一下.<一道 C 语言指针访存题目的引申>,里面的第一个题目就把我难住了. 帮助123456789 #include <stdio.h>   int main() {     int a[5] = {1, 2, 3, 4, 5};     int *pa = (i