推广 热搜: 产品  让人  哪有  也就  关系  显示器  面板  牛奶  站在  爸爸 

指针数组 、指针数组的使用

   日期:2023-04-24     浏览:27    评论:0    
核心提示:指针数组怎么使用在C语言和C++等语言中,数组元素全为同一类指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。指针数组比较适合用来指向若干个字符串,使字

指针数组怎么使用

在C语言和C++等语言中,数组元素全为同一类指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。指针数组比较适合用来指向若干个字符串,使字符串处理更加方便、灵活。一维指针数组的定义形式为:“类型名 *数组标识符[数组长度]”。

指针与数组

数组名所代表的就是该数组最开始的一个元素的地址,在计算数组元素a[i]的值时,C语言实际上线将其转换为 (a+i)的形式,然后再进行求值。他们是等价的,可以将指针后面加下标,比如pa[i]和 (pa+i)是等价的,但是指针比单纯的数组名要快一些。

有一点很重要的,数组名和指针之间有一个不同之处,指针是一个变量,因此,pa+a和pa++都his合法的,但数组名不是变量(类似一个宏定义?用数组名替换地址?),所以进行对自身的增减运算是非法的。

有时如果将数组名传递给函数,函数可以根据情况判定是按照数组处理还是按照指针处理,随后根据相应的方式操作该函数,为了更直观的表示数组名和指针,可以同时使用两种表示方法。

也可以将数组的一部分传递给函数,不必须从起始位置运算、对于函数来说,它并不关心所引用的是否是一个大数组的其中一部分。

地址算数运算

*allocp = allocbuf起始是存储空间的起始位置。

之后的函数中allocbuf + ALLOCSIZE是存储空间的最后的地址,因为存储空间不一定是从0开始,所以起始地址加上总大小得到的就是这个存储空间最后的地址。减去allocp是将已分配的空间减去,得到的必然是小于或等于空间大小的数,这个数就是剩余的空间的大小。

这就比如从30000开始之后10000的部分是存储空间,已分配空间在35000那么30000加10000减去35000就是剩余的空间了。

之后的那个allocp自增让我懵了一下。自增之后为啥又减了,仔细看发现。allocp += n确实是自增了,本身的地址也改变了。但是allocp - n只是将数值传回了,并没有对自己赋值。

这个函数确实不完善,afree函数很简单就是确定参数的地址是否在存储空间内。是的话就将已分配的地址变成新的地址。

指针也可以初始化,对指针有意义的初始化只能是0或者是表示地址的表达式,表达式代表的地址必须是已经定义的具有适当类型的数据的地址。

static char *allocp = allocbuf;

allocbuf需要在之前已经定义为字符数组才是有意义的。

C语言保证0永远不是有效的数据地址。因此,返回值0可用来表示发生了异常事件。

指针与整数之间不能相互转换,但0是唯一的例外,常熟0可以赋值给指针,指针也可以和常量0进行比较。程序中通常用符号常量NULL代替常量0。符号常量0定义在标准头文件stddef.h中。

在某些情况下对指针可以进行比较运算。如果指针p和q是同一个数组的成员,那么他们之间就可以进行类似于==、!=、,=的关系比较运算。任何指针与0进行相等或不等的比较运算都有意义。但是指向不同数组的元素的指针之间的算数或比较运算没有定义,(这里有一个特例。指针的算数运算中可使用数组最后一个元素的下一个元素的地址。)

指针可以和整数进行相加或相减运算。无论指针对象是何种类型都成立,相加的整数会根据指针指向的类型长度按比例缩放,

指针相减也是有意义的,同数组中的指针相减会得到指针之间字符的数量。

指针的算数运算具有一致性,所有的指针运算都会自动考虑它所指向的对象的长度。

有效的指针运算包括相同类型指针之间的赋值运算;指针同整数之间的加法或减法运算;指向相同数组中元素的两个指针间的减法或比较运算;将指针赋值为0或指针与0之间的比较运算。除此之外其他所有的指针运算都是非法的。(两个指针之一是void *类型的情况除外)

指针数组和数组指针的区别有哪些?

指针数组和数组指针的区别主要有以下几点:

1、数组名不可以改变,而指向数组的指针是可以改变的。字符串指针指向的字符串中的字符是不能改变的,而字符数组中的字符是可以改变的。求数组长度时,借用数组名可求得数组长度,而借用指针却得不到数组长度。

2、数组名的指向不可以改变,而指向数组的指针是可以改变的。因为数组名的指向是不可以改变的,使用自增运算符自增就会改变其指向,这是不对的,数组名只能指向数组的开头。

3、指针数组是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。数组指针是一个指针,它指向一个数组。在32位系统下永远是占4个字节,至于它指向的数组占多少字节。

4、字符串指针指向的字符串中的字符是不能改变的,而字符数组中的字符是可以改变的。指针数组本身就是个数组,只不过呢,它里面存放的数据类型不是int,也不是char这类基本类型,而是一个指针类型,说白了就是地址。

扩展资料:

对于指针数组,首先,它是一个数组,知道数组的元素是一个指针,换句话说,数组存储一个指针。此外,数组本身的字节数由数组本身决定;

数组指针,首先它是一个指针,数组指针的指针数组,也就是说,它是一个指针指向一个数组,唯一可以确定的是它是4个字节在32位系统中,但多少字节是指向一个数组,这不是确定的,它取决于情况。

指针数组和数组指针的区别

1、性质不同

指针数组:首先它是一个数组,数组的元素都是指针,它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组,它是“指向数组的指针”的简称。

2、字节不同

数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32位系统下任何类型的指针永远是占4个字节。

数组指针在32位系统下任何类型的指针永远是占4个字节,至于它指向的数组占多少字节,不知道,具体要看数组大小。

3、表示方法不同

指针数组:数组a中的元素都为int型指针;数组指针:指向数组a的指针。

4、变量不同

指针数组:指针数组可以说成是”指针的数组”,这个变量是一个数组。

数组指针:数组指针可以说成是”数组的指针”,这个变量是一个指针。

指针数组和指针是一样的吗?

正确的。

数组指针是指向数组地址的指针,其本质为指针;指针数组是数组元素为指针的数组(例如 int *p[4],定义了p[0],p[1],p[2],p[3]三个指针),其本质为数组。数组指针的使用在某些情况下与指针数组很相似,要注意区别。

p是一个指针变量,它指向包含4个int元素的一维数组,此时p的增量以它所指向的一维数组长度为单位。

*(p+i)是一维数组a[i][0]的地址;*(p+2)+3表示a[2][3]地址(***行为0行,***列为0列),*(*(p+2)+3)表示a[2][3]的值。

扩展资料:

对指针进行初始化或赋值只能使用以下四种类型的值:

1. 0 值常量表达式,例如,在编译时可获得 0 值的整型 const对象或字面值常量 0。

2. 类型匹配的对象的地址。

3. 另一对象末的下一地址。

4. 同类型的另一个有效指针。

参考资料:

百度百科-指针数组

关于指针数组和指针数组的使用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

原文链接:http://www.lingmov.com/news/show-15225.html,转载和复制请保留此链接。
以上就是关于指针数组 、指针数组的使用全部的内容,关注我们,带您了解更多相关内容。
 
标签: 指针 数组 地址
打赏
 
更多>同类资讯
0相关评论

推荐资讯
网站首页  |  VIP套餐介绍  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  手机版  |  SITEMAPS  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报