95 C语言数组灵活多变的访问形式
来源:互联网 发布:js utf16to8 编辑:程序博客网 时间:2024/06/10 02:07
C学习网:链接->C学习网
C训练网:链接->C训练网
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 = cnum1 = 101num2 = 2686736num3 = 2686738
怎么样,够晕吧,如果你嗤之以鼻,那么恭喜你,你的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;
- }
abcdefghijcdefghijce
第5行代码用来将字符数组中的所有元素都初始化为\0
,这样在循环结束时就无需添加字符串结束标志。前面三个 printf() 比较容易理解,第四个 printf() 可以参照上面的说明 3),str+2 表示指向第 2 个元素,(str+2)[2] 相当于 *(str+2+2),也就是取得第 4 个元素的值。
阅读全文
1 0
- 95 C语言数组灵活多变的访问形式
- 灵活多变的Javascript
- C语言中指针和数组的几种访问形式
- IOS一个灵活多变的cell
- C语言字符数组的两种形式与区别
- C语言定义数组的几种形式
- C语言定义数组的几种形式
- c语言 第一讲 字符串数组函数调用--const的灵活运用
- C语言中的指针,数组,指针数组, 数组形式参数
- C语言二维数组访问
- 工厂模式 + 反射 ?= 灵活多变的数据库
- 重新演绎动态编译类,打造灵活多变的系统
- SpringMVC 第三篇【灵活多变的方法映射】
- MyBatis的动态SQL查询-让查询更灵活多变!
- 设计模式系列5---多变灵活的桥接
- MyBatis的动态SQL查询-让查询更灵活多变!
- 以指针的形式和以下标的形式访问指针?以指针的形式和以下标的形式访问数组?
- C语言数组和指针是如何访问的
- Error running demo: This version of Android Studio is incompatible with the Gradle Plugin used.
- IOS Swift3.1保存数据
- 腾讯云安装配置Apache+MariaDB服务器并解决SQLSTATE[HY000] [1130] Host t '*’ is not allowed to connect to this se问题
- Android之各生命周期的作用及意义
- merge-intervals
- 95 C语言数组灵活多变的访问形式
- 线程简单理解
- 蓝桥杯训练:递归——f(n)=1+2+……+n
- FZU 2127 养鸡场【思维】
- 自学Java之Java编程(通过Internet 进行通信)(017day)
- Linux安装ftp组件(vsftpd)
- js中类定义函数时用prototype与不用的区别
- 96 C语言指针变量作为函数参数
- 蓝桥杯训练:递归——f(n)=n!