zoukankan      html  css  js  c++  java
  • 学点 C 语言(21): 数据类型 数组与指针


    1. 获取数组的地址无须 &, 因为数组名本身就是个地址
    #include <stdio.h>
    
    int main(void)
    {
        char c = 'A';
        char cs[] = "ABC";
    
        printf("%c, %s\n", c, cs);           /* 获取字符及字符数组的内容 */
        printf("%p, %p, %p\n", &c, cs, &cs); /* 获取字符及字符数组的地址, cs 与 &cs 没有区别*/
    
        getchar();
        return 0;
    }
    

    2. 数组元素的地址是连续的:
    #include <stdio.h>
    
    int main(void)
    {
        char cs[] = "ABC";
    
        printf("%p\n%p\n%p\n%p\n", cs, &cs[0], &cs[1], &cs[2]);
    
        getchar();
        return 0;
    }
    

    3. 数组名所代表的地址就是第一个元素的地址:
    #include <stdio.h>
    
    int main(void)
    {
        char str[] = "ABC";
        char *p1 = str;
        char *p2 = &str[0];
    
        printf("%p, %p\n", p1, p2);
    
        getchar();
        return 0;
    }
    

    4. 通过指针访问数组元素:
    #include <stdio.h>
    
    int main(void)
    {
        char str[] = "ABC";
        char *p = str;
    
        printf("%c\n", *p);
        printf("%c\n", *p+1);
        printf("%c\n", *p+2);
    
        printf("\n");
        
        printf("%c\n", *p);
        printf("%c\n", *++p);
        printf("%c\n", *++p);
    
        getchar();
        return 0;
    }
    

    5. 通过指针遍历数组:
    #include <stdio.h>
    
    int main(void)
    {
        char str[] = "123456789";
        char *p = str;
    
        int i;
        for (i = 0; i < sizeof str/sizeof str[0]; i++) {
            printf("%c\n", *p);
            p++;
        }
    
        getchar();
        return 0;
    }
    
    #include <stdio.h>
    
    int main(void)
    {
        char str[] = "123456789";
        char *p = str;
    
        while (*p != '\0') {
            printf("%c\n", *p);
            p++;
        }
    
        getchar();
        return 0;
    }
    
    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
        char str[] = "123456789";
        char *p = str;
    
        int i;
        for (i = 0; i < strlen(str); i++) {
            printf("%c\n", *(p+i));
        }
    
        getchar();
        return 0;
    }
    
    #include <stdio.h>
    
    int main(void)
    {
        int nums[] = {111,222,333,444};
        int *p = nums;
    
        int i;
        for (i = 0; i < sizeof nums / sizeof nums[0]; i++) {
            printf("%d\n", *p++);
        }
    
        getchar();
        return 0;
    }
    

    6. 注意: 指针+1 是根据元素大小移动一个位置
    #include <stdio.h>
    
    int main(void)
    {
        int nums[] = {111,222,333,444};
        int *p = nums;
    
        int i;
        printf("%d\n", *p);
        printf("%d\n", *(p+1));
    
        printf("%d\n", *p+1);  /* 不是这样; 这是代表取值后再 + 1 */
        
        getchar();
        return 0;
    }
    

    7. 上面的指针其实都是数组元素的指针, 如何声明真正的数组指针呢?
    #include <stdio.h>
    
    int main(void)
    {
        int nums[4] = {111,222,333,444};
        int (*p)[4] = &nums;      /* 注意其中的小括号 */
    
        printf("%d\n", (*p)[1]);  /* 用起来并不方便   */
        printf("%d\n", (*p)[2]);
        
        getchar();
        return 0;
    }
    

  • 相关阅读:
    完全背包笔记
    渗透测试之信息收集常用网站
    结对项目-四则运算"软件"之升级版
    第三次作业:个人项目-小学四则运算“软件”之初版
    分布式版本控制系统Git的安装与使用
    第一次作业:准备
    爬虫综合大作业
    爬取全部校园新闻
    理解爬虫原理
    中文词频统计与词云生成
  • 原文地址:https://www.cnblogs.com/del/p/1342667.html
Copyright © 2011-2022 走看看