数组a和&a区别

假设我们定义一个数组char a[16]; 那么a与&a分别代表什么呢?它们完全一样吗?

a其实代表的是数组中首元素的地址,即a[0]的地址,&a代表的是整个数组的起始地址。我们做个测试就可以很容易知道。

我们分别测试a  a+1  &a   &a+1这四个值,它们分别为:

a 0x0012fcc8
a+1 0x0012fcc9
&a 0x0012fcc8
&a+1 0x0012fcd8

a和&a的值虽然完全一样,但是他们的含义是不同的。

我们再用sizeof 测试一下他们两个,看看是否相同:

sizeof a 16
sizeof &a 4

第一个得到的是整个数组的大小,第二个得到的是地址的大小。这一点要注意。

转自:http://www.cnblogs.com/wangshuo/archive/2011/07/23/2114658.html

时间: 2024-12-28 21:56:37

数组a和&a区别的相关文章

php 合并数组 "+"和"array_merge"的区别

主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意 1)键名为数字时,array_merge()不会覆盖掉原来的值,但+合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖) 2)键名为字符时,+仍然把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉,但array_merge()此时会覆盖掉前面相同键名的值 <?php$array1 = array(0 => 'zero_a', 2 => 

(实用篇)PHP中unset,array_splice删除数组中元素的区别

php中删除数组元素是非常的简单的,但有时删除数组需要对索引进行一些排序要求我们会使用到相关的函数,这里我们来介绍使用unset,array_splice删除数组中的元素区别吧 如果要在某个数组中删除一个元素,可以直接用的unset,但是数组的索引不会重排: <?php $arr = array('a','b','c','d'); unset($arr[1]); print_r($arr); ?> 结果是: Array ( [0] => a [2] => c [3] => d

数组和链表的区别

数组和链表的区别 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素.但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中.同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素.如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组. 链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起.比如:上一个元素有个指针指到下一个元素,以此类推,直到最后一

数组与链表的区别?

数组与链表的区别? Java 数组 链表 (附件: markdownFile.md) 来自为知笔记(Wiz) 附件列表

数组和链表的区别以及数组和结构体的区别

1,数组和链表的区别? 链表和数组都叫可以叫做线性表, 数组又叫做顺序表,主要区别在于,顺序表是在内存中开辟一段连续的空间来存储数据,而且必须是相同类型的数据. 而链表是通过存在元素中的指针联系到一起的,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域,链表既可以靠指针来连接多块不连续的的空间也可以用一段连续的空间, 在逻辑上形成一片连续的空间来存储数据. 两种数据结构各有各的好处,链表方便删除和插入,数组方便排序等. 数组从栈中分配空间, 对于程序员方便快速

数组与指针的区别

数组与指针的区别 1.数组与指针的定义 指针是变量,存储的是一个地址,用来间接访问数据,在32位系统下占用4个字节.指针可以指向任何内存空间,但不是任何内存空间都可以通过指针去访问(不能访问寄存器). 数组是标识符且不占用存储空间,类似于常量,因此数组名不能作为左值. short *sz[4]; //大小为4的一维数组,元素是指针 short (*sz1)[4]; //指向数组的指针 2.extern数组与指针 先看这一段代码: /* * d.c * Created on: * Author:

字符串拼接 strcat ;数组和指针的区别

问题:字符串拼接 strcat 方法1: 开辟新空间,存放结果: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> char* _strcat(char* str1, char* str2){ assert(str1 != NULL && str2 != NULL); char* ret = (char*)malloc((strlen(

数组与指针的区别,以及在STL中传递数组/指针

数组和指针在作为实参传入T[] 或T*的形参时没有区别 void f(int pi[]) { cout << sizeof(pi) << endl; } int a[5] = { 1,2,3,4,5 }; f(a); 上述代码输出的是4(32位系统)或8(64位系统),总之不是sizeof(int) * 5(数组大小). 为什么明明形参是数组形式的int [],实际上和指针形式的int *无异呢?关键原因就在于,数组是不能作为左值的. 也就是说,你不能定义两个数组,比如int a[

每天一个JavaScript实例-标量参数和数组参数的功能性区别

<!DOCTYPE> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-标量参数和数组参数的功能性区别</title> <scrip

C++数组和链表的区别

Q: 讲一下C++数组和链表的区别? A:数组在分配内存的时候是一块连续的空间,并且每个元素的内存是一样的,因此可以用下标快速访问:但正因为如此,在其中插入或者删除的操作就比较麻烦,要移动别的元素的位置,因此需要快速访问存取并且不频繁增删就用数组: 链表的每个元素使用指针相互链接,分配的空间比较自由,每个元素可以不同类型不同大小,但是访问就必须链式线扫且没有下标,插入删除比较方便,只用替换和删除指针即可,适合频繁增删的操作需求.