C语言字符数组存储形式问题

 2024-03-05 04:03:42  阅读 0

C语言数组指针的关系

指针和数组是C语言中两个非常重要的概念。 它们是密切相关的。 利用这种关系,可以增强处理数组的灵活性,加快运行速度。 本文重点介绍指针和数组的联系以及在编程中的应用。 1、指针与数组的关系 当一个指针变量被初始化为一个数组名时,就说该指针变量指向了该数组。 例如:char str[20],*ptr;ptr=str;ptr设置为数组str的第一个元素的地址,因为数组名是数组的首地址,也是str的第一个元素的地址数组。 这时,你可以认为指针ptr就是数组str(反之则不然),这样原来对数组的处理就可以用指针来实现。 例如,可以使用下标变量或指针来访问数组元素。 ...全部

指针和数组是C语言中两个非常重要的概念。 它们是密切相关的。 利用这种关系,可以增强处理数组的灵活性,加快运行速度。 本文重点介绍指针和数组的联系以及在编程中的应用。 1、指针与数组的关系 当一个指针变量被初始化为一个数组名时,就说该指针变量指向了该数组。

例如:char str[20],*ptr;ptr=str;ptr设置为数组str的第一个元素的地址,因为数组名是数组的首地址,也是str的第一个元素的地址数组。 这时,你可以认为指针ptr就是数组str(反之则不然),这样原来对数组的处理就可以用指针来实现。

例如,可以使用下标变量或指针来访问数组元素。 2、如果指向数组元素的指针有如下定义:int a[10],*pa;pa=a; 然后p=&a[0]将数组第一个元素的地址赋给指针变量p。

事实上,C语言中的数组名就是数组的首地址,因此第一个元素的地址可以通过两种方式获得:p=&a[0]或p=a。 这两个方法在形式上类似,不同的是:pa是指针变量,a是数组名。 值得注意的是:pa是一个可以改变的指针变量,a是一个常量。

因为一旦声明了数组,数组的地址就固定了,所以a不能改变。 不允许使用a++、++a或a+=10的语句,但pa++、++pa、pa+=10是正确的。 可以看到此时指针和数组已经融为一体了。 3、指针与一维数组 要了解指针与一维数组的关系,首先要了解一维数组的存储组织形式以及编译系统中对数组元素的访问方式。

一维数组是存储在连续内存单元中的线性列表。 C语言访问数组是通过数组名(数组的起始地址)加上相对于起始地址(下标变量给定)的相对量来获取要访问的数组元素的单元地址,然后计算访问输出单元地址的内容。

数据类型所占用的单位字节数通常称为扩展因子。 事实上,编译系统在执行操作之前会将数组元素形式a[i]转换为*(a+i)。 对于一般形式为:[]的数组元素,编译器将其转换为:*(+),其中下标表达式为:下标表达式*扩展因子。

整个公式的计算结果是一个内存地址,最终的结果是:*=。 可见,C语言对数组的处理实际上就是将其转换为指针地址的操作。 数组和指针是隐式组合的。 因此,任何可以通过下标执行的操作都可以使用指针来执行。 不带下标的数组名是指向该数组的指针。

4.指针和多维数组 指针变量可以指向一维数组或多维数组。 但在概念和使用上,多维数组的指针比一维数组的指针更复杂。 例如,在三维数组中,参考元素c[i][j][k]的地址计算最终会被替换为:*(*(*(c+i)+j)+k)。

了解了多维数组的存储形式以及访问多维数组元素的内部转换公式后,我们来看一下指针变量指向多维数组及其元素时的情况。 1 如果指向数组元素的指针变量有如下描述:int a[3][4];int *p;p=a;p是一个指向整型变量的指针; p=a 使得p 指向整数二维数组a 的首地址。

*(*(p+1)+2)表示取a[1][2]的内容; *p表示取a[0][1]的内容,因为p是一个指向整型变量的指针; p++表示将p的内容加1,即p存储的地址增加整数个字节2,使p指向下一个整数a[0][1]。

2 指向由j个整数组成的一维数组的指针变量 当指针变量p不指向整数变量,而是指向包含j个元素的一维数组时。 如果p=a[0],则p++指向的不是a[0][1],而是a[1]。

此时p的增量是以一维数组的长度为基础的。 5.指针和字符数组 C语言中很多字符串操作都是通过指向字符数组的指针和指针操作来实现的。 因为字符串一般都是严格按顺序访问的,所以使用指针可以打破这种访问方式,更灵活地处理字符串。

另外,由于字符串使用'\0'作为终止符,而'\0'的ASCII码为0,正好是C语言的逻辑假值,所以可以直接作为判断条件字符串结尾不使用字符串的长度来判断。 C语言中类似的字符串处理功能都是使用指针完成的,使得程序运行得更快、更高效、更容易理解。

标签: 数组 指针 指向

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码