c语言中数组名和指针变量的区别,C语言中数组名和指针的区别

2020-11-23 09:31:55 字数 4914 阅读 1464

1楼:销

数组名除了sizeof会返回数组大小,其他的实况下是相当于一个指针常量无区别的(指针常量也就是说,不能改变数组名的值,比如int a[10]; a++,a--,a=a+10等都是非法的)

c语言中数组名和指针的区别

2楼:匿名用户

数组在当作参数传递时,可以当作指针;当然,参数传递相当于赋值操作,所以用指针来接受数组的值也是可以的。

除此之外,指针就是指针,数组就是数组,一点也不一样,例如1,数组名不能作为左值,即不能被赋值,也不能进行++ --操作2,sizeof 数组名 和 sizeof 指针 不同

3楼:

数组名本质上就是个指针,也就是地址,但是它是一个常指针,是个固定值,而指针是是指针变量的简称,是个变量,这个变量存放的是地址值,它的值是可以改变的。例如:

int*p;

inta,b;

p=&a;//把变量a的地址赋值给指针p,那么指针p就指向了变量a的内存单元

p=&b;//把变量b的地址赋值给指针p,那么指针p就指向了变量b的内存单元

inta[10];//整型数组,数组名a本质上是一个地址,是首元素地址,它是一个固定值,不能对它进行赋值操作。

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

4楼:匿名用户

数组名确实表示指向数组首地址的指针,但这个指针很特别,它的值(指针的值指的是指针所指的地址)不能被改写,能改写的仅仅是其指向的内容,换句话说,数组名只能指向数组的首地址,如果有数组char a;那么如果出现a = a+1;这是编译都通不过的错误。而对于一个普通的指针是可以的,再比如有数组char a;那么再定义一个char *p = a;然后再用p = p+1是合法的,这表示让指针p指向&a[1]。

它们的第二个区别是:每当用到数组名这个指针的时候,系统都会传入数组的信息,而普通的指针只是一个4字节的整数,例如:

chara[5];

char*p=a;//指针a和指针p都指向数组a的首地址cout<

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

5楼:塞上孤独

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

c语言中数组名和指针的区别 及 sizeof用法

6楼:匿名用户

指针需要给一个明确的指向才能使用,否则就是一个野指针。

数组名就是一个有明确指向的指针。

数组名有点类似于const指针。比如:

int a[10]=;

a就类似于const int * p = a;

另外,指针的sizeof就是4字节(视系统而定,一般4字节);数组名的sizeof就是这个数组的整个size。

比如:sizeof(p) = 4; sizeof(a) = 10*sizeof(int);

c/c++中,数组名和指针的区别

7楼:匿名用户

一维数组 可以认为是常量一维指针. 即除了不能修改值, 其他都可以当指针操作.

多维数组, 可以认为是对应的数组指针.

数组名和指针最大的区别是, 数组名自身不占用内存空间, 即&数组名得到的地址还是数组名值本身, 亦即数组首地址. 而指针是有自己的内存空间的, &指针变量, 得到的是另外一个地址.

从编译器角度分析c语言中数组名和指针的区别

8楼:匿名用户

从编译生成的角度来说

数组名 没有本身的存储空间,其只是一个地址。 代表数组的首地址。

于是 数组名的值 不可能被改变。

而指针 是一个变量 有自身的存储空间

可以被改变值 执行数学操作。

c语言中的数组和指针的区别

9楼:

c语言中,数组的名称等价于数组的首地址,

当然可以利用指针开辟动态空间,使用方式与

数组在形式上相同的,

但是他们有一个本质的区别,数组名相当于一个地址常数,而指针是一个以地址为内容的变量。

指针与数组的关系可以参考下面的网页:

http://zhidao.baidu.***/question/341950481.html

10楼:匿名用户

指针可分为:指针常量,指针变量

。指针常量是指在程序运行过程中变量值不能改变的变量(例如:char* const p = "abc";)。

指正变量是指在程序运行过程中变量值可以改变的变量(int * p;p++;)。

数组:数组是装载的容器,数组名代表数组首地址(例如:int a[20],则a代表的是a[0]的地址),数组名是一个指针常量,在运行过程中不能改变其值(如上:

a的值是&a[0],若有a=&a[2]:则报错)。

他们的区别:数组名是一个指针常量,而指针可分为:指针常量和指针变量。

我想你应该明白了。

11楼:匿名用户

数组名是数组的第一个元素的地址,其意义相当于一个指针,比如

int a[10],*p;

p=a; //把数组的首地址赋给了p

p=&a[0]; //p的初值为a[0]的地址与上面的语句等价可以通过指针引用数组元素

数组本来就有两种表示方法

一种是下标法如a[i];

一种是指针法如*(a+i)或*(p+i)这两种表示方法都与a[i]等价

12楼:匿名用户

数组是存放数据的一段空间,数组中可以存放字符和数字。指针相当于一个地址,它是指向某个单元的地址。。数组名相当于指针。。

13楼:匿名用户

定义char a[100], *b = a;

1、数组和指针都表示地址,在某些情况下,数组和指针是可以相互使用的,如访问某个元素,a[2], *(a + 2), b[2], *(b +2)

2、不同的是,数组初始化时就有给定值的空间,标识符不能更改,如a = 0,这是错误的。而指针如果不初始化,值是随机的,需要给指针分配空间才能访问。

14楼:匿名用户

简单明了的说:

数组是装载的容器,

指针是指向这些容器的地址的。

那为什么有时候可以用指针来代替数组呢?

那是因为当指针指向了该数组的地址的时候,它就可以实现这个功能!

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

15楼:匿名用户

区别:c语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在c语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以就会觉得指针和数组名很像,但是必须要注意的是,数组名只是指针中的一种,它是指针中只指向栈区的且指针的移动范围是有限的,即数组长度。

而且数组在定义之初就已经有了自己的内存,一般的指针如果未指向某一个内存块时,它是没有自己的内存的,即所谓的野指针。

联系:如上面所说,数组只是定义在栈区的一个连续变量,它的首地址就是一个指针。

总结:不仅数组有指针,所有变量都有指针,指针说白了就是内存中的地址,就像一个房间必须有一个房间号。在c/c++语言中定义一个指针,就是在栈区开辟一个内存空间用来存放它指向的内存地址,然后给指针赋值,就是把地址值赋值给刚才开辟的内存空间,然后通过访问该内存中的地址值来间接访问该地址下存放的数据。

如果该地址值指向的是一块静态存储区,如字符串常量等,当然就不可以修改指向的内容啦。

经验之谈,楼楼加分啊

16楼:匿名用户

指针就是一个装地址的变量,数组是内存中的一个区域,而数组名是这个区域的首地址。也就是说你在定义指针的时候编译器只分配了一个变量的空间(空间大小由内存地址长度决定),而定义数组的时候编译器分配了一段区域的空间(空间大小由[ ]里面的数字和数组的类型决定)。使用上你可以把一个地址赋值给指针,但是不能赋值给数组名。

你可以直接给数组里面的变量赋值,这是安全的,因为内存已经申请好了,而给指针里面装个那个地址赋值就要小心了,因为指针里面那个地址很可能会出错。

17楼:匿名用户

数组 eg: a[10] 这个数组名a就是一个指针,

那如果是在动态内存中建立一个数组的话,是没有数组名可以被使用的,必须用指针(解引用)间接来调用,所以数组和指针是分不开的

18楼:不再犹豫

一维数组名可以看做一个存储数组首地址的常量,不可变。而指针是个储存地址变量,可根据需要指向不同元素;声明一个数组,就可以对数组相应的存储空间内的数据进行赋值,修改;指针则是声明后,必须先对指针赋予地址,然后对所赋予地址中的数据进行赋值,修改(注意越界)

c语言里面为什么不能把指针赋给数组名?

19楼:匿名用户

有两种情况。。

1、char *p = "123"; char s[4];

s = p;

这种情况是不合法的。。此时的数组名虽然也是指针,但应该看成指针常量,是不能修改的。。

2、void fun(char a){}

void main()

数组作为函数参数的时候,是可以把指针变量赋值给它的,这时数组名就可以看作一般的指针变量了。。

简单的说就是这样。。

20楼:匿名用户

数组名是常量,也就是常指针。给常数赋值自然是错误的。

21楼:匿名用户

他是个常指针,是个常量,不能赋值的

C语言中数组下标有下限吗,c语言中,数组元素的下标下限为

1楼 天云一号 c语言中数组的下标是根据用户定义的数组大小来确定的,最小下标为0 举例说明如下 int a 5 定义一个int型数组,并对其进行初始化。则共有a 0 a 1 a 2 a 3 a 4 这5个元素,所以其下标的范围为0 5 更一般的就是 数组a n 的下标范围为0 n 1 2楼 百度用户...

c语言中,数组元素的下标是从什么开始的

1楼 匿名用户 从0开始 比如a 100 就是0 99的下标 2楼 大狂哥灬 比如说a 4 是从下标0开始到3结束 a n 就是从0开始到n 1结束 c语言数组的下标总是从0开始吗 3楼 水水好萌 是的,对数组a max max是一个编译时可知的值 来说,它的第一个和最后一个元素分别是a o 和al...

c语言中的和两个运算符有什么区别

1楼 匿名用户 在c语言中,运算符 和运算符 所表示的意义不同。 是赋值运算符,它的含义是将右侧表达式的值赋给左侧的变量。 是关系运算符,如果两侧表达式的值相等,则其值为1,否则为0。 2楼 匿名用户 一个等号是赋值运算符,用于把等号右边的结果赋值给左边的变量 两个等号是判等运算符,用于判断等号左右...