时间:2021-05-19
C语言中的指针使得代码的编写非常灵活,如果指针能够和数组结合,那将会有更多的“花招”,请看下面的代码:
#include <stdio.h> int main(){ char str[20] = "c.biancheng.net"; char *s1 = str; char *s2 = str+2; char c1 = str[4]; char c2 = *str; char c3 = *(str+4); char c4 = *str+2; char c5 = (str+1)[5]; int num1 = *str+2; long num2 = (long)str; long num3 = (long)(str+2); printf(" s1 = %s\n", s1); printf(" s2 = %s\n", s2); printf(" c1 = %c\n", c1); printf(" c2 = %c\n", c2); printf(" c3 = %c\n", c3); printf(" c4 = %c\n", c4); printf(" c5 = %c\n", c5); printf("num1 = %d\n", num1); printf("num2 = %ld\n", num2); printf("num3 = %ld\n", num3); return 0;}运行结果:
s1 = c.biancheng.net
s2 = biancheng.net
c1 = a
c2 = c
c3 = a
c4 = e
c5 = c
num1 = 101
num2 = 6421984
num3 = 6421986
怎么样,够晕吧,如果你嗤之以鼻,那么恭喜你,你的C语言基础很扎实。
1) str 既是数组名称,也是一个指向字符串的指针;指针可以参加运算,加 1 相当于数组下标加 1。
printf() 输出字符串时,要求给出一个起始地址,并从这个地址开始输出,直到遇见字符串结束标志\0。s1 为字符串 str 第 0 个字符的地址,s2 为第 2 个字符的地址,所以 printf() 的结果分别为 c.biancheng.net 和 biancheng.net。
2) 指针可以参加运算,str+4 表示第 4 个字符的地址,c3 = *(str+4) 表示第4个字符,即 'a'。
3) 其实,数组元素的访问形式可以看做 address[offset],address 为起始地址,offset 为偏移量:c1 = str[4]表示以地址 str 为起点,向后偏移4个字符,为 'a';c5 = (str+1)[5]表示以地址 str+1 为起点,向后偏移5个字符,等价于str[6],为 'c'。
4) 字符与整数运算时,先转换为整数(字符对应的ASCII码)。num1 与 c4 右边的表达式相同,对于 num1,*str+2 == 'c'+2 == 99+2 == 101,即 num1 的值为 101,对于 c4,101 对应的字符为 ‘e',所以 c4 的输出值为 'e'。
5) num2 和 num3 分别为字符串 str 的首地址和第 2 个元素的地址。
为了加深大家的理解,请继续阅读下面的代码:
#include <stdio.h>#include <stdlib.h> int main(){ char str[20] = {0}; int i; for(i=0; i<10; i++){ *(str+i) = 97+i; // 97为字符a的ASCII码值 } printf("%s\n", str); printf("%s\n", str+2); printf("%c\n", str[2]); printf("%c\n", (str+2)[2]); return 0; }运行结果:
abcdefghij
cdefghij
c
e
第5行代码用来将字符数组中的所有元素都初始化为\0,这样在循环结束时就无需添加字符串结束标志。
前面三个 printf() 比较容易理解,第四个 printf() 可以参照上面的说明 3),str+2 表示指向第 2 个元素,(str+2)[2] 相当于 *(str+2+2),也就是取得第 4 个元素的值。
到此这篇关于详解C语言数组灵活多变的访问形式的文章就介绍到这了,更多相关C语言数组访问形式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C语言中,指针是一个复杂但又灵活多变的知识点,我们知道,在一维数组中,对于一个数组a[],*a,a,&a,都表示a的首地址,但如果与二维数组混合使用,就显得更为
数组在所有的语言中,以C最为简单,就是一起始地址,外加一数组的长度,而且基本上没有任何功能可言。然而,在所有的数组使用中,却是C的这种简单的数组形式,以其灵活性
C/C++动态数组的创建的实例详解在C++语言中,二维动态数组主要使用指针的方法建立,以建立一个整数二维数组为例:#include#include#includ
c语言定义数组的方法是:C语言中,同变量一样;数组也必须先定义后使用。一维数组的定义形式。 1、类型标识符,数组名[常量表达式];例如inta[10];其中a
详解C语言用malloc函数申请二维动态数组的实例C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单。Sampleone#includ