区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以就会觉得指针和数组名很像,但是必须要注意的是,数组名只是指针中的一种,它是指针中只指向栈区的且指针的移动范围是有限的,即数组长度。而且数组在定义之初就已经有了自己的内存,一般的指针如果未指向某一个内存块时,它是没有自己的内存的,即所谓的野指针。
联系:如上面所说,数组只是定义在栈区的一个连续变量,它的首地址就是一个指针。
总结:不仅数组有指针,所有变量都有指针,指针说白了就是内存中的地址,就像一个房间必须有一个房间号。在C/C++语言中定义一个指针,就是在栈区开辟一个内存空间用来存放它指向的内存地址,然后给指针赋值,就是把地址值赋值给刚才开辟的内存空间,然后通过访问该内存中的地址值来间接访问该地址下存放的数据。如果该地址值指向的是一块静态存储区,如字符串常量等,当然就不可以修改指向的内容啦。
经验之谈,楼楼加分啊
主要区别就是数组存储在连续的内存块里
指针比较灵活,动态申请内存,所以内存地址是不连续的
联系嘛,就是数组的调用可以用指针的形式,数组首个元素的地址就是指针的首地址
一维数组名可以看做一个存储数组首地址的常量,不可变。而指针是个储存地址变量,可根据需要指向不同元素;声明一个数组,就可以对数组相应的存储空间内的数据进行赋值,修改;指针则是声明后,必须先对指针赋予地址,然后对所赋予地址中的数据进行赋值,修改(注意越界)
数组 eg: a[10] 这个数组名a就是一个指针,
那如果是在动态内存中建立一个数组的话,是没有数组名可以被使用的,必须用指针(解引用)间接来调用,所以数组和指针是分不开的
指针就是一个装地址的变量,数组是内存中的一个区域,而数组名是这个区域的首地址。也就是说你在定义指针的时候编译器只分配了一个变量的空间(空间大小由内存地址长度决定),而定义数组的时候编译器分配了一段区域的空间(空间大小由[ ]里面的数字和数组的类型决定)。使用上你可以把一个地址赋值给指针,但是不能赋值给数组名。你可以直接给数组里面的变量赋值,这是安全的,因为内存已经申请好了,而给指针里面装个那个地址赋值就要小心了,因为指针里面那个地址很可能会出错。