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;
    }
    

  • 相关阅读:
    手机微信浏览器手动清楚浏览器缓存
    CSS 图像精灵怎么用(css sprites定位技术) 图标定位
    电商平台应该分析哪些数据?具体怎么去分析?
    酷家乐装修方案
    字体识别(根据图片截图识别字体) 求字体
    酿造系列:自己酿造夏日饮用的低度甜酒好喝吗?如何酿造?
    xcode Xcode_9.2.xip 官方离线下载地址
    nginx给server增加日志配置
    用monit监控mongodb,崩溃后自动重启mongdb
    电商产品经理进阶一:电商基础流程
  • 原文地址:https://www.cnblogs.com/del/p/1342667.html
Copyright © 2011-2022 走看看