指针与数组的区别和联系是什么? 指针与数组的区别和联系

作者&投稿:孔沾 (若有异议请与网页底部的电邮联系)
指针与数组之间的恩恩怨怨
很多初学者弄不清指针和数组到底有什么样的关系。我现在就告诉你:他们之间没有
任何关系!只是他们经常穿着相似的衣服来逗你玩罢了。
指针就是指针,指针变量在32 位系统下,永远占4 个byte,其值为某一个内存的地址。
指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到。
数组就是数组,其大小与元素的类型和个数有关。定义数组时必须指定其元素的类型
和个数。数组可以存任何类型的数据,但不能存函数。
既然它们之间没有任何关系,那为何很多人把数组和指针混淆呢?甚至很多人认为指
针和数组是一样的。这就与市面上的C 语言的书有关,几乎没有一本书把这个问题讲透彻,
讲明白了。
指针和数组的对比
指针
保存数据的地址,任何存入指针变量p 的数据都会被当作地址来处理。p 本身的地址由编译器另外存储,存储在哪里,我们并不知间接访问数据,首先取得指针变量p 的内容,把它作为地址,然后从这个地址提取数据或向这个地址写入数据。指针可以以指针的形式访问*(p+i);也可以以下标的形式访问p[i]。但其本质都是先取p 的内容然后加上i*sizeof(类型)个byte 作为数据的真正地址。通常用于动态数据结构通相关的函数为malloc 和free。通常指向匿名数据(当然也可指向具名数据)
数组
保存数据,数组名a 代表的是数组首元素的首地址而不是数组的首地址。&a 才是整个数组的首地址。a 本身的地址由编译器另外存储,存储在哪里,我们并不知道。直接访问数据,数组名a 是整个数组的名字,数组内每个元素并没有名字。只能通过“具名+匿名”的方式来访问其某个元素,不能把数组当一个整体来进行读写操作。数组可以以指针的形式访问*(a+i);也可以以下标的形
式访问a[i]。但其本质都是a 所代表的数组首元素的首地址加上i*sizeof(类型)个byte 作为数据的真正地址。通常用于存储固定数目且数据类型相同的元素。隐式分配和删除自身即为数组名

指针可以看作是windouws系统的快捷方式,数组可以看做是存有数据的文件夹。访问指针将会带领你找到并操作真实的文件夹,访问数组时则是直接找到并操作文件夹。

区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以就会觉得指针和数组名很像,但是必须要注意的是,数组名只是指针中的一种,它是指针中只指向栈区的且指针的移动范围是有限的,即数组长度。而且数组在定义之初就已经有了自己的内存,一般的指针如果未指向某一个内存块时,它是没有自己的内存的,即所谓的野指针。
联系:如上面所说,数组只是定义在栈区的一个连续变量,它的首地址就是一个指针。
总结:不仅数组有指针,所有变量都有指针,指针说白了就是内存中的地址,就像一个房间必须有一个房间号。在C/C++语言中定义一个指针,就是在栈区开辟一个内存空间用来存放它指向的内存地址,然后给指针赋值,就是把地址值赋值给刚才开辟的内存空间,然后通过访问该内存中的地址值来间接访问该地址下存放的数据。如果该地址值指向的是一块静态存储区,如字符串常量等,当然就不可以修改指向的内容啦。

经验之谈,楼楼加分啊

C语言中,指针和数组的区别和联系?~

区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以就会觉得指针和数组名很像,但是必须要注意的是,数组名只是指针中的一种,它是指针中只指向栈区的且指针的移动范围是有限的,即数组长度。而且数组在定义之初就已经有了自己的内存,一般的指针如果未指向某一个内存块时,它是没有自己的内存的,即所谓的野指针。
联系:如上面所说,数组只是定义在栈区的一个连续变量,它的首地址就是一个指针。
总结:不仅数组有指针,所有变量都有指针,指针说白了就是内存中的地址,就像一个房间必须有一个房间号。在C/C++语言中定义一个指针,就是在栈区开辟一个内存空间用来存放它指向的内存地址,然后给指针赋值,就是把地址值赋值给刚才开辟的内存空间,然后通过访问该内存中的地址值来间接访问该地址下存放的数据。如果该地址值指向的是一块静态存储区,如字符串常量等,当然就不可以修改指向的内容啦。

经验之谈,楼楼加分啊

区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以就会觉得指针和数组名很像,但是必须要注意的是,数组名只是指针中的一种,它是指针中只指向栈区的且指针的移动范围是有限的,即数组长度。而且数组在定义之初就已经有了自己的内存,一般的指针如果未指向某一个内存块时,它是没有自己的内存的,即所谓的野指针。
联系:如上面所说,数组只是定义在栈区的一个连续变量,它的首地址就是一个指针。
总结:不仅数组有指针,所有变量都有指针,指针说白了就是内存中的地址,就像一个房间必须有一个房间号。在C/C++语言中定义一个指针,就是在栈区开辟一个内存空间用来存放它指向的内存地址,然后给指针赋值,就是把地址值赋值给刚才开辟的内存空间,然后通过访问该内存中的地址值来间接访问该地址下存放的数据。如果该地址值指向的是一块静态存储区,如字符串常量等,当然就不可以修改指向的内容啦。

经验之谈,楼楼加分啊

C语言中,数组和指针定义在内存方面的区别在哪?
答:1,指针变量用于保存数据的地址,数组用于直接保存数据(当然你可能见过,数组的每个元素是指针,不过,一组指针也是数据,它们各自的内容才是地址)2,访问方式:指针是间接访问,首先取得指针的内容作为地址,再去该地址访问数据;数组是直接访问,数组名即是地址 3,指针通常用于动态数据;数组通常用于固定...

字符数组和字符指针变量的区别是啥呀?
答:数组是一个数据结构,指针是一种类型指向变量在内存里的位置,两者原本没有什么相同点,让大家容易产生他们直接有联系的错觉是因为c/c++语言标准中,使用数组名的时候会转换为指向数组第一个元素的地址的指针。数组内储存的数据在内存中是连续的,所以下面代码中:char str[]={'H','e','l','l','...

指针的意思是什么?
答:是a=a+b++==0的简写,从运算符的优先级可知:++最高、+次之、==再次之,而=最低,即先进行b++运算,在进行a+(b++)运算,其次进行a+(b++)==0运算,最终把a+(b++)==0的结果赋给a。

关于表单name为数组和字符串的区别,谁能解释下
答:用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:1.字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来...

求大神::C语言的 &数组名 和 数组名的区别
答:2.&数组名相当于指针的指针,指向数组名,而数组名又是一个数组的首地址,求sizeof结果是一下的,返回的都是数组的大小 3.&符号有去地址的作用,而数组名本身也是一个地址,它指向的数组的第一行。&数组指向的数组名,是指针的指针。所以才会有:&数组名类型是 int (*)[],而数组类型是int [...

数组和矩阵有和区别?
答:1、用途不同:矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。而数组用来存储具有相同的数据类型的元素(在C、C++、Java、pascal中都这样。)2、构造类型不同:在C语言中, ...

C#中数组,ArrayList和List三者的区别
答:在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢。数组 数组在C#中最早出现的。在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单。string[] s=new string[2];//赋值 s[0]="a";s[1]="b";//修改 s[1]="a1";//数组 string[] ...

数据结构有哪些
答:*** 结构:除了同属于一种类型外,别无其它关系 线性结构:元素之间存在一对一关系常见类型有: 数组,链表,队列,栈,它们之间在操作上有所区别.例如:链表可在任意位置插入或删除元素,而队列在队尾插入元素,队头删除元素,栈只能在栈顶进行插 入,删除操作. 树形结构:元素之间存在一对多关系,常见类型有:树(有许多...

字符数组和字符串的区别
答:’作为串的结束。2、字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。区别二:对字符串指针方式不同1、char*ps=”CLanguage”;可以写成char*ps;ps=”CLanguage”;2、数组方式charst[]={”CLanguage”};不能写成charst[20]; St={”CLanguage”};只能对字符数组的各元素逐个赋值。...

c#中List,Dictionary,ArrayList,Hashtable和数组的区别是什么
答:与哈希表类似,区别在于SortedList中的Key数组排好序的 //Hashtable类 哈希表,名-值对。类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先散列过。如果以任意类型键值访问其中元素会快于其他集合。GetHashCode()方法返回一个int型数据,使用这个键的值生成该int型数据。哈希表获取这个值...