
二维数组和指针的关系,二维数组和指针的关系
- 科技
- 2023-10-06
- 6

C语言:简述一下“数组和指针的关系”? 指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。数组名对应着(而不是指向)一块...
C语言:简述一下“数组和指针的关系”?
指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。
数组是用指针方式实现的,但数组值是一个常量,即不能改变数组的首地址,而指针是一个变量,可以改变它的值;如:数组 a和指针p,p=a+1;是合法的,但a=a+1;是不合法的。
指针:系统为某一个变量开辟单元格,指针便指向此单元格的变量值。数组:系统为某一组数开辟一组单元格,数组首地址便是你定义的数组变量名。数组和指针的唯一区别是,不能改变数组名称指向的地址。
c语言中,指针变量中可以保存任意的地址值;数组名是一个地址常量,不可以更改。
二维数组的指针,某一行的指针,某一元素的指针各代表什么含义?
在C语言中,可以通过定义一个行数组指针,使得这个指针与二维数组名具有同样的性质,实现它们之间可以直接赋值。
而a是一个二维数组的名字,它指向的是它所属元素的首元素,它的每一个元素都是一个行数组,因此,它的指针移动单位是“行”,所以a+i指向的是第i个行数组,即指向a[i]。
二维数组的指针,其运算的基本单位是行宽,因此二维数组的指针又称为行指针,假设a的首地址为1000,p指向a,当p++时地址值是增加了一行的宽度,也即加一后p的值为1016而不是1001也不是1004。
二维数组名是不是一个“指针”?
二维数组的数组名代表了一个指针,这个指针指向的是一维数组,不是另一个指针。
数组名就是一个指针常量,它代表数组元素在内存相关信息。C语言 是一门通用计算机编程语言,应用广泛。
不可以,二维数组要看做“数组的数组”。(以如下定义为例:int a[4]; int * p;)给你个对于指针和数组的正确理解吧:定义的不同:C 里,指针和数组是不同的类型,不要把数组名看做“常指针”。
二维数组名a是一个指向指针的指针。也是一个指针数组名,它含3个元素,a[0]a[1],a[2]。虽然a存储的地址是该数组首元素的地址,但它指向的并不是一个变量,而是一个指针。
你可以把二维数组看作是 一个一维数组,不过这个一维数组的所有元素都是一个一维数组。
二维数组名a就是一个指针了,你在int **ptr将ptr定义成了指针的指针。这个时候你应该将a的地址赋值给ptr才行。
请教C++二维数组和指针的简单问题。
(a+1)是{41, 543}的地址,指向43。
char *str[12] = {enter, number};这样定义出来的数据分布情况,str这个指针数组存储在栈区,作为局部数据(如果是在函数内部定义)。若是定义为全局变量则该数据存储在.data区。
假设 int a[3][4];那么:a + 1 -- 第1行的首地址, 即a[1](a + 1)〈=〉a[1],也是第1行的首地址 两者的值是一样的。
因为最后一个循环还要用到p,所以前面改变了p值,后面就没办法得到正确值了。
C语言中“二维数组行指针”是什么意思
在C语言中,可以通过定义一个行数组指针,使得这个指针与二维数组名具有同样的性质,实现它们之间可以直接赋值。
数组名就是一个指针常量,它代表数组元素在内存相关信息。C语言 是一门通用计算机编程语言,应用广泛。
a即是它的行指针,a+0表示第0行的地址,a+1表示第1行地址…a[row]+col即列指针,列指针经过一次解引用就可以转化成二维数组中实际的值,列指针也是指向非常量的常量指针。
type (*)[n] 是行指针类型格式,方括号内的n就是指示行宽,因此行指针不是简单的一维数组指针,而是被限定宽度的一维数组指针,这就是区别。
本文链接:http://www.depponpd.com/ke/48327.html