-
如何把数组赋值指针
- 时间:2024-11-23 14:30:10
大家好,今天Win10系统之家小编给大家分享「如何把数组赋值指针」的知识,如果能碰巧解决你现在面临的问题,记得收藏本站或分享给你的好友们哟~,现在开始吧!
生意如何小账本专业版-小商户销售和存货记账系列软件最新版本下载
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<iostream.h>
#include<iomanip.h>
int main()
{ int i,j;
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
cout<<"输出二维数组a:"<<endl;
for(i=0;i<3;i++)
{ for(j=0;j<4;j++)
cout<<setw(8)<<*(*(a+i)+j); //输出数组元素
cout<<endl;
}
return 0;
}
程序运行结果:
1 2 3 4
5 6 7 8
9 10 11 12
几点注意:
(1)对于二维数组a,虽然a和a[0]都是地址而且值相同,但意义不同:二维数组名a是指向行(数组)的,一维数组名a[0]是指向列(元素)的。在指向行的指针前面加一个*运算,就转换为指向列的指针;反之,在指向列的指针前面加一个&运算,就成为指向行的指针。
(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<<setw(8)<<*(*(a+i)+j)改为:
? 指针加偏移量的方式:cout<<setw(8)<< *(aPtr+i*4+j)。
? 直接移动指针:cout<<setw(8)<<*aPtr++。
思考一下,若int *aPtr=a,会出现什么情况?为什么?
(2) 二维数组的行指针
二维数组的行指针是指向有确定长度的一维数组的指针,又称二级指针。在定义时,必须明确指出这个指针指向的一维数组有多少个元素。用行指针来处理二维数组,则行指针所指数组的长度等于二维数组的列数。行指针定义的一般形式如下:
<类型标识符> (*<指针变量名>)[<常量表达式>]
其中<常量表达式>即表示该指针指向的数组的长度。
【例7- 9】通过行指针来引用二维数组元素。
#include<iostream.h>
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<<"请给出输出元素的下标值:"<<endl;
cout<<"行标号:";
cin>>i;
cout<<"列标号:";
cin>>j;
cout<<"a["<<i<<","<<j<<"]="<<*(*(p+i)+j) <<endl;
return 0;
}
程序运行结果:
行标号:1<Enter>
列标号:2<Enter>
a[1][2]=7
2.c语言中将一个数组的值赋给另外一个数组,好像要用指针来赋值
错误的,不能用赋值语句将一个字符串常量直接给一个字符数组赋值。
chars[20];
charss[]="hello";
s=ss;错误原因是:是您不能使用赋值语句将一个字符数组直接赋值给一个字符串数组,也就是说,必须使用strcpy()函数来实现一个字符串的副本(在c语言中,但是在c++的string类中,上面的赋值是正确的)。
因为赋值字符“=”右边的表达式也可以是赋值表达式,下面的形式变量是=(变量=表达式);这是真的,所以它是嵌套的。展开后的一般形式为:variable=variable=…=表达式;例如:a=b=c=d=e=5;根据赋值运算符的正确啮合,其有效等价为:e=5;D=e;C=d.B=C.A=B;
Chara[]="toyou";正确的理由:因为当你声明一个数组变量时,你只是为它腾出空间并初始化它,这是c语法。
扩展资料:
C语言中字符串赋值的理解
一、指针式赋值
上面的例子很明显,也很容易理解。但是下面的方法有点难以理解。
通过程序的运行,我们可以知道:char*p="hello";这个字符串赋值非常好。为了理解这个赋值,我们首先需要理解双引号在这个语句中的作用(注意:这是双引号,不要使用单引号)。双引号有三个主要作用:
(1)申请了空间(在常量区),存放了字符串。
(2)在字符串尾加上了“\0”。
(3)返回地址。
这里所返回的地址就赋值给了char*类型的指针变量p。
二、通过字符数组直接把字符串赋值。程序如下:
三、需要注意的一些问题
直接把字符串赋值给数组名(也就是数组首元素的首地址)是不行的。
以上就是关于「如何把数组赋值指针」的全部内容,本文讲解到这里啦,希望对大家有所帮助。如果你还想了解更多这方面的信息,记得收藏关注本站~
Win10系统之家独★家使★用,转载请注明出处!
上一篇:如何通过gps定位手机 下一篇:如何锻炼逻辑思维
相关文章
-
1.怎么将一组数组赋值给指针,比如,a[][3]={2,4,5,6,7,8,9,10,11}*p(3)我要直接赋值的指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。但在概念和使用上,多维数组的指针比一维数组的指针要复杂。1、二维...
-
1.C语言一维数组赋值一位数组赋值的几种方式inta[10]={1,2,3,4,5,6,7,8,9,10};.一般初始化,例:inta[10]={3,10,5,3,4,5,6,7,8,9};intarray[5]={2,3,4,5,6};其结果是给每一个数组元素都指定了初值。2.部分元素初始化,...
-
1.指向函数指针的定义形式数组篇(一)用函数指针变量调用函数可以用指针变量指向整形变量、字符串、数组、结构体、也可以指向一个函数。一个函数在编译时被分配一个入口地址。这个入口地址就称为函数指针。可以用一个指针变...
-
1.怎么把电脑的c盘扩大使用Vista/windows7自带分区工具,可以做到硬盘无损重新分区分区。1、在桌面右键点击“计算机”-“管理”,打开的计算机管理窗口,在打开的计算机管理窗口的左侧,鼠标左键单击选“磁盘管理”打开磁盘管理...