怎么把数组赋值给指针变量

如题所述

第1个回答  2022-10-24
1. 怎么将一组数组赋值给指针,比如, a[][3]={2,4,5,6,7,8,9,10,11} *p(3)
指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。

但在概念和使用上,多维数组的指针比一维数组的指针要复杂。1、二维数组的地址 二维数组可以理解为一个广义的一维数组,一个以一维数组为元素的一维数组。

例如定义一个数组:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 则数组a对应的元素为:a[0][0] a[0][1] a[0][2] a[0][3] …… 第0行 a[1][0] a[1][1] a[1][2] a[1][3] …… 第1行 a[2][0] a[2][1] a[2][2] a[2][3] …… 第2行 现在将第0行数组元素a[0][0]、a[0][1]、a[0][2]、a[0][3]组成数组a[0],第1行数组元素a[1][0]、a[1][1]、a[1][2]、a[1][3]组成数组a[1],第2行数组元素组成数组a[2],则a[0]、a[1]、a[2]就是一维数组名,代表一个地址常量,分别指向每行的第0列元素,如图 7 7和图 7 8所示。那么a[0]+1指向第0行的第1个元素,a[1]+1指向第1行的第1个元素,所以称a[0]、a[1]、a[2]为列指针,对它们的增减1将移动1列元素。

图 7 8 二维数组中元素地址示意图 对于二维数组a来说,还可以把它看成是由a[0]、a[1]、a[2]这些“元素”组成的一维数组,如图 7 8所示。而a[0]、a[1]、a[2]又是由4个int型元素组成的数组,所以a+0指向a[0]数组的首地址(第0行元素的首地址),a+1指向a[1]数组的首地址(第1行元素的首地址),那么a+i指向第i行的首地址,所以a被看成是一个行指针,指针a的基类型是一个由4个int型数据构成的数组。

由于a指向a[0],a+1指向a[1],所以*a等价于a[0],*(a+1)等价于a[1],*(a+i)等价于a[i],行指针*运算得到列指针。而a[0]+1指向第0行的第1个元素,a[1]+1指向第1行的第1个元素,那么*(a[0]+1)等价于a[0][1],*(a[1]+1)等价于a[1][1],*(a[i]+j)等价于a[i][j],列指针*运算得到二维数组的元素值。

而a[i]又等价于*(a+i),所以*(a[i]+j)与*(*(a+i)+j)等价,都表示二维数组元素a[i][j]。对于二维数组a[M][N]中的任意一个元素a[i][j],其地址可以表示为:(1)&a[i][j],(2)&a[0][0]+i*N+j,(3)a[i]+j等价于*(a+i)+j (4)a[0]+ i*N+j 对于二维数组a[M][N]中的任意一个元素a[i][j],还可以表示成*(a[i]+j)、*(*(a+i)+j)、(*(a+ i))[ j]、*(a[0]+ i*N+j)、*(&a[0][0]+i*N+j)等形式。

【例7- 8】通过数组元素的地址来引用二维数组元素。#include #include int main() { int i,j; int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; cout<<"输出二维数组a:"<

在指向行的指针前面加一个*运算,就转换为指向列的指针;反之,在指向列的指针前面加一个&运算,就成为指向行的指针。(2) *(a+i)和a[i]是等价的,但它们在各维数组中的含义不同:对于一维数组a,*(a+i)和a[i]是一个元素;而对于二维数组a,*(a+i)和a[i]则仍然是一个地址,*(*(a+i)+j)才是元素a[i][j],*(*(a+i+j))也是元素,但它是a[i+j][0]元素。

2、二维数组的指针 同样还可以用指针变量来访问二维数组元素。由于二维数组的地址有行地址和列地址两种,所以和地址相对应的指针也有两种,分别为行指针和列指针。

(1)二维数组的列指针 列指针是指向具体元素的指针,又称一级指针,其定义和一般变量指针的定义是一样的。在例7.8程序中增加一行列指针定义语句:int *aPtr=a[0]; 或int *aPtr=&a[0][0] 将例7.8程序中输出数组元素的语句cout<

 直接移动指针:cout<

在定义时,必须明确指出这个指针指向的一维数组有多少个元素。用行指针来处理二维数组,则行指针所指数组的长度等于二维数组的列数。

行指针定义的一般形式如下: (* )[ ] 其中 即表示该指针指向的数组的长度。【例7- 9】通过行指针来引用二维数组元素。

#include int main() { int i,j; int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*p)[4]; 定义一个指向一维数组(有4个整型元素)的指针变量 p=a; cout<<"请给出输出元素的下标值:"< >i; cout<<"列标号:"; cin>>j; cout<<"a["< 列标号:2 a[1][2]=7。
2. 怎么向指针数组中赋值
不可以

原因很简单

"one","two"是存在静态存储区的,这个地址中的值不能被修改。

*(p[1]+1)=getchar();

运行这句,程序应该崩溃

也就是说这种声明:char *p[]={"one","two"};

是不能修改其中指针指向地址中的值的,只能读取



char p[][5]={"one","two"};

这种声明,变量则是存在栈上的,这时就可以

*(p[1]+1)=getchar();

来修改
3. 数组可以赋值给指针吗
可以。

指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量。 数组,是有序的元素序列。

若将有限个类型相同的变量的 *** 命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。

数组名可以代表数组的首地址,num就是num数组的首地址,pn声明为一个指针变量,它的值直接指向(points to)存在电脑存储器中另一个地方的值,也就是个地址。因此num的值是可以赋值给pn的。

扩展资料: 数组使用规则 1.数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。

2.数组名的书写规则应符合标识符的书写规定。 3.数组名不能与其它变量名相同。

4、只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;(请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。)

参考资料: 百度百科-数组 百度百科-指针。
4. 数组可以赋值给指针吗
可以。

指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量。

数组,是有序的元素序列。若将有限个类型相同的变量的 *** 命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。

数组名可以代表数组的首地址,num就是num数组的首地址,pn声明为一个指针变量,它的值直接指向(points to)存在电脑存储器中另一个地方的值,也就是个地址。因此num的值是可以赋值给pn的。

扩展资料:

数组使用规则

1.数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。

2.数组名的书写规则应符合标识符的书写规定。

3.数组名不能与其它变量名相同。

4、只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;(请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。)
相似回答