• C数组灵活多变的访问形式


     1 #include <stdio.h>   
     2 int main(){   
     3     char str[20] = "c.biancheng.net";  
     4     char *s1 = str; 
     5     char *s2 = str+2;
     6     char c1 = str[4];
     7     char c2 = *str;
     8     char c3 = *(str+4);
     9     char c4 = *str+2;
    10     char c5 = (str+1)[5];
    11     
    12     int num1 = *str+2;
    13 
    14     printf(" s1 = %s
    ", s1);
    15     printf(" s2 = %s
    ", s2);
    16     printf(" c1 = %c
    ", c1);
    17     printf(" c2 = %c
    ", c2); 
    18     printf(" c3 = %c
    ", c3); 
    19     printf(" c4 = %c
    ", c4);
    20     printf(" c5 = %c
    ", c5);   
    21     printf("num1 = %d
    ", num1);   
    22 
    23     return 0;
    24 }

    1) str 既是数组名称,也是一个指向字符串的指针;指针可以参加运算,加 1 相当于数组下标加 1。
    printf() 输出字符串时,要求给出一个起始地址,并从这个地址开始输出,直到遇见字符串结束标志。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 个元素的地址。

     1 #include <stdio.h>
     2 #include <stdlib.h> 
     3 int main(){
     4     char str[20] = {0};
     5     int i;
     6     for(i=0; i<10; i++){
     7         *(str+i) = 97+i; // 97为字符a的ASCII码值
     8     }
     9  
    10     printf("%s
    ", str);
    11     printf("%s
    ", str+2);
    12     printf("%c
    ", str[2]);
    13     printf("%c
    ", (str+2)[2]);
    14     return 0;
    15  
    16 }

     参数的传递本质上是一次赋值的过程,赋值就是对内存进行拷贝。所谓内存拷贝,是指将一块内存上的数据复制到另一块内存上。

    天涯犹在,不诉薄凉。
  • 相关阅读:
    主页面
    EasyUI写的登录界面
    SpringMVC学习笔记二第一个小的程序
    springmvc学习笔记一框架的理解
    mybitis学习笔记
    cheng gong de daima
    JQuery中如何使用事件来出发Ajax
    按照用户名和角色查询用户liferay
    在liferay中如何使用Ajax的请求
    [奇葩说]
  • 原文地址:https://www.cnblogs.com/Knight02/p/13985630.html
Copyright © 2020-2023  润新知