指针数组与二级指针,二级指针可以指向二维数组吗
- 前端设计
- 2023-09-20
- 50
大家好,感谢邀请,今天来为大家分享一下指针数组与二级指针的问题,以及和二级指针可以指向二维数组吗的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,...
大家好,感谢邀请,今天来为大家分享一下指针数组与二级指针的问题,以及和二级指针可以指向二维数组吗的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
c语言指针数组的用法
一维数组指针
一维数组的指针是直接将一维数组的首地址赋予指针变量,之后通过指针变量的运算逐渐输出一维数组中的各个元素的值。
例如:inta[20];
int*p;
因为数组名相当于一个指针指向的就是一维数组的首地址(例如a[0]),所以可以直接将数组名赋予指针变量(例如p=a),无需加取地址符&;也可以让指针变量指向第一个元素的地址(例如p=&a[0]);即p=a与p=&a[0]是等价的,(应当要注意的是:p=a是将数组首元素的地址赋给指针变量,而非将数组a的各元素的值赋给指针变量)
如果一个指针变量p已经指向数组中的一个元素,则p+1指向数组中的下一个元素,p-1指向的是数组中的上一个元素。(注意:执行P+1或P-1时,并不是将P的值简单的加1,而是加上一个数组元素所占用的字节数,例如:float型,每个元素占4个字节,所以p+1意味着使p的地址加4个字节,以便让其指向下一个元素)
这里的a+i与p+i是等价的,也可以用数组名进行运算;
e
*(a+i)==*(p+i);
二维数组指针
令inta[2][3]={{1,2,3},{4,5,6}}
在二维数组中数组名指向数组的首元素,但是不是简单的表示一个简单的元素,而是由多个元素所组成的一维数组,因此数组名指的是二维数组首行(即下标为0的那一行)的首地址,a+1即表示下标为1的那一行元素,又因为数组名代表首元素的地址,所以a即代表二维数组中a[0][0]的值,a+1即a[1][0]的值。a[0]等价于*(a+0),a[1]等价于*(a+1),(a+1)+1的值即&a[1][1]。要想得到a[1][1]的值,就要再进行取值,即(a[1]+1)或*((a+1)+1)为a[1][1]的值。(注意:(a+i)与a[i]是等价的)
切记二维数组名是指向二维数组首行,而非指向二维数组a[0][0];
二维数组在指向行的指针前加*,就转化为了指向列的指针,反之,在二维数组指向列的指针前加&,就转化为了指向行的指针.(例如:&a[i]或a+i指向行.而a[i]或*(a+i)则指向列)
在定义时的int(*p)[4]的意思是指针变量p指向包含四个整型元素的一维数组,即在二维数组中一共有四行元素
数组指针和指针数组有啥区别
指针数组和数组指针的区别如下:
1.定义方式不同:指针数组是一个元素为指针类型的数组,而数组指针是一个指向数组的指针。
2.数据类型不同:指针数组中每个元素都是一个指针,而数组指针本身是一个指向特定类型数据的数组。
3.访问元素不同:在访问指针数组时,需要首先访问该元素所在的位置,然后使用间接引用操作符(*)来访问该元素所指向的值;在访问数组指针时,可以直接使用下标操作符[]访问其所指向的数组中的元素。
4.内存布局不同:对于指针数组,每个元素都是一个独立的内存位置,其值存储了相应对象或变量地址;而对于数组指针,它本身也是一个变量,并且存储了整个数组的地址
数组和指针之间有什么关系
1、指针:系统为某一个变量开辟单元格,指针便指向此单元格的变量值。
2、数组:系统为某一组数开辟一组单元格,数组首地址便是你定义的数组变量名。
数组和指针的唯一区别是,不能改变数组名称指向的地址。
对于数组来说,数组的首地址,也可以用指针来表示操作,如:
inta[10];
int*p,n;
p=a;
对第一个元素取值,可以用几种方法:
n=a[0];
n=*p;
n=p[0];
n=*(p+0);
但是以下语句则是非法的:
readings=totals;//非法!不能改变readingstotals=dptr;//非法!不能改变totals
数组名称是指针常量。不能让它们指向除了它们所代表的数组之外的任何东西。
扩展资料
下面的程序定义了一个double数组和一个double指针,该指针分配了数组的起始地址。随后,不仅指针符号可以与数组名称一起使用,而且下标符号也可以与指针一起使用。
intmain()
{
constintNUM_COINS=5;
doublecoins[NUM_COINS]={0.05,0.1,0.25,0.5,1.0};
double*doublePtr;//Pointertoadouble
//AssigntheaddressofthecoinsarraytodoublePtr
doublePtr=coins;
//Displaythecontentsofthecoinsarray
//Usesubscriptswiththepointer!
cout<<setprecision(2);
cout<<"Herearethevaluesinthecoinsarray:\n";
for(intcount=0;count<NUM_COINS;count++)
cout<<doublePtr[count]<<"";
//Displaythecontentsofthecoinsarrayagain,butthistimeusepointernotationwiththearrayname!
cout<<"\nAndheretheyareagain:\n";
for(intcount=0;count<NUM_COINS;count++)
cout<<*(coins+count)<<"";
cout<<endl;
return0;
}
程序输出结果:
Herearethevaluesinthecoinsarray:0.050.10.250.51Andheretheyareagain:0.050.10.250.51
当一个数组的地址分配给一个指针时,就不需要地址运算符了。由于数组的名称已经是一个地址,所以使用&运算符是不正确的。但是,可以使用地址运算符来获取数组中单个元素的地址。
区分数组指针和指针数组
区别是:数组指针是一个指针,指针指向一个数组,在32位系统中占4个字节,而数组所占字节的大小还需要进一步判定。指针数组是一个数组,数组中存储是指针,其在编辑器中所占的内存有多少字节由数组本身决定;
二维数组指针作为形参怎么取值
二维数组采用二级指针作为形参传给函数。
指针数组与二级指针和二级指针可以指向二维数组吗的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!
本文链接:http://www.xinin56.com/qianduan/28572.html