C语言数组名和指针的区别?

作者&投稿:楚鹏 (若有异议请与网页底部的电邮联系)
C语言中,指针和数组的区别和联系?~

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

经验之谈,楼楼加分啊


数组和指针的区别:
数组名确实表示指向数组首地址的指针,但这个指针很特别,它的值(指针的值指的是指针所指的地址)不能被改写,能改写的仅仅是其指向的内容,换句话说,数组名只能指向数组的首地址,如果有数组char a[];那么如果出现a = a+1;这是编译都通不过的错误。而对于一个普通的指针是可以的,再比如有数组char a[];那么再定义一个char *p = a;然后再用p = p+1是合法的,这表示让指针p指向&a[1]。
它们的第二个区别是:每当用到数组名这个指针的时候,系统都会传入数组的信息,而普通的指针只是一个4字节的整数,例如:

char a[5];
char *p = a;//指针a和指针p都指向数组a的首地址
cout << sizeof (a) << "##" << sizeof (p) << endl;

这时的运行结果是“5##4”



为什么数组名的那个指针不能运算,也就是你说的不能改写,告诉你那是因为数组一旦定义了,就放到常量区了,你试试看你能改变常量吗?


C语言中,用数组名作形参和用指针作形参有区别吗?
还是有差别的 虽然大多数时候都可以相互用 最大的差别就是指针可以改变,可以通过指针改变指向内容的值,但数组名不行 举个例子:(分别作为形参)int num[10], *p;p = num;\/\/此时p指向数组的第一个元素 我在主函数里调用两个函数 1 Sum(num);2 Sum(p+2,10);这就有区别了,因为num...

C语言可以把指针和数组名之间相互赋值吗?
不可以,C\/C++中 数组名虽然形同一个指针 但是是常值 是不可以进行赋值操作的,同理 也不可以进行++ -- += -= 操作,希望可以帮助到你

c语言中,数组名和指针名都代表内存地址。那么定义一个其他的变量,比如...
非也非也。int a,a就是代表的内存里面的值,&a才是a的地址。int *a,a代表的是一块内存地址,*a代表该地址里面的值。

从汇编语言的角度看清数组名和指针变量的区别
(3)用常量字符串初始化字符数组和指针变量 char a[]="hello";char *p="hello";1212 这两条语句似乎没啥区别,都是初始化了一个字符串。但是,经过上面的分析可以看出这两条语句的区别是很明显的。字符数组的初始化其实是定义了6个字节的内存空间, 然后把”hello”的每个字符依次放进去,a[0]...

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

C语言指针数组指针怎样理解?
指针数组,指数组元素就是指针 数组指针,对于一维数组来说就是数组名 故对于一维数组来说,数组名是第一个元素的指针,而元素本身也是指针,故数组名是指向指针的指针。例如: int * p = &a; int ** q = &p;则p中储存的是整形变量a的地址,而指针p自身也是变量(指针变量通常占4个字节),故...

C语言的数组和指针问题,谢谢高手的解答!
所以B是一个2级常指针,同样指向二维数组的第一个元素B[0],而B[0]是一个一维数组。总结,问题的关键在于,数组名相当于一个指向于这个数组第一个元素的指针。3)所以,int A[2][3][4]={0};A是一个三维数组,其中A[0]和A[1]都是它的元素,A[0]是第一个元素。所以, A是一个三级...

a是数组名p是指针那*p=a和p=a有什么区别
这是你的跑图 正确的用法 我知道你的问题了,你写的没错。 你定义的时候,同时定义了数组和地址变量并且赋值,你用的是逗号隔开的,不是分号,你所谓的*p=a 其实是 int *p=a, 也就是 int *p ; p=a;一句话,你写的并没有错。只是容易误解。欢迎大家给我点赞,这么多回答的,就我...

C语言中的数组名是什么类型的?
C语言中,数组名是一个不可变的指针常量,不能对它进行加、减和赋值运算。在C语言中规定,数组名是代表该数组的首地址且符合标识符书写规定的变量标识符。不能对它进行加、减和赋值运算。整个数组是以首地址开头的一块连续的内存单元。如有字符数组char c[10],设数组c的首地址为2000,也就是说c[...

C中数组和指针到底是否相同?
规则1:表达式中的数组名总被编译器解析为指针,因此如下语句int a[3];int *p=a;是可以正确编译执行的。在表达式中a被解析为指向数组第一个元素的指针,那么赋值符号两边的类型匹配,因此可以正确编译执行。规则2:下标总是和指针的偏移量相同。C语言中将数组的下标改写成指针偏移量的主要原因在于指针和偏移量是底层...

南沙群岛19173018412: C语言中,用数组名作形参和用指针作形参有区别吗? -
挚养保胎: 还是有差别的 虽然大多数时候都可以相互用 最大的差别就是指针可以改变,可以通过指针改变指向内容的值,但数组名不行 举个例子:(分别作为形参) int num[10], *p; p = num;//此时p指向数组的第一个元素 我在主函数里调用两个函数 1 ...

南沙群岛19173018412: C语言中数组名和指针的区别 -
挚养保胎: 数组在当作参数传递时,可以当作指针;当然,参数传递相当于赋值操作,所以用指针来接受数组的值也是可以的.除此之外,指针就是指针,数组就是数组,一点也不一样,例如 1,数组名不能作为左值,即不能被赋值,也不能进行++ --操作 2,sizeof 数组名 和 sizeof 指针 不同

南沙群岛19173018412: C语言中:数组指针与指针数组有什么区别? -
挚养保胎: 数组指针是指向这个数组首地址的指针,指向对象是这个数组;指针数组是存放一类指针的数组,这个数组的每个元素都是一个指针;例子:int a[10]; int* s; s = a;//这里s就是一个数组指针,它的值就是数组a 的首地址;当然,如果a是一个整数,那s就是一个指向整型的指针;int a; int* s[5]; for(int i=0;i<5;i++)s[i]=a;//这里s就是一个指针数组,它的每个元素都是整型变量a的地址 应该算比较明白了吧 谢楼上提醒

南沙群岛19173018412: 数组与指针的区别 -
挚养保胎: 在上面那位的基础改了一下,数组不能动态分配,可以直接用宏定义其实,在WinXP SP3 + VS 2005 express下通过#include using namespace std;#define N 10 template T min(T *num,int n) { T k = *num; for (int i = 1;i < n;i ++) {

南沙群岛19173018412: C语言中,指针和数组的区别和联系? -
挚养保胎: 区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针.所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以...

南沙群岛19173018412: 数组指针和指针数组的区别 -
挚养保胎: 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的长度. 如要将二维数组赋给一指针,应...

南沙群岛19173018412: C语言中数组名和指针的区别 及 sizeof用法 -
挚养保胎: 指针需要给一个明确的指向才能使用,否则就是一个野指针. 数组名就是一个有明确指向的指针. 数组名有点类似于const指针.比如: int a[10]={0}; a就类似于const int * p = a; 另外,指针的sizeof就是4字节(视系统而定,一般4字节);数组名的sizeof就是这个数组的整个size. 比如:sizeof(p) = 4; sizeof(a) = 10*sizeof(int);

南沙群岛19173018412: C++的指针与数组名有什么区别? -
挚养保胎: .数组和指针的区别: 数组名确实表示指向数组首地址的指针,但这个指针很特别,它的值(指针的值指的是指针所指的地址)不能被改写,能改写的仅仅是其指向的内容,换句话说,数组名只能指向数组的首地址,如果有数组char a[];那么如...

南沙群岛19173018412: C语言数组下标和指针的关系 -
挚养保胎: 数组和指针的区别: 数组名确实表示指向数组首地址的指针,但这个指针很特别,它的值(指针的值指的是指针所指的地址)不能被改写,能改写的仅仅是其指向的内容,换句话说,数组名只能指向数组的首地址,如果有数组char a[];那么如...

南沙群岛19173018412: C语言中用指针表示数组和用数组名表示数组的区别? -
挚养保胎: 如果你是说你注释那里 改成 int *cpointer; int c_count = 0; 如果是这样的话 那就是 cpointer并没有具体指向的空间 换成 int arr[100]; int *cpointer = arr; int c_count = 0; 这样就好了 指针有了具体的指向了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网