zoukankan      html  css  js  c++  java
  • C语言 指针

    指针的基本声明:

    void test() {
        char a;
        // a = 10; 直接引用
        
        // 定义了一个指针变量b,而且b只能指向char类型的变量
        char *b;
        
        // 让指针变量b指向a
        b = &a;
        
        // 这里的*b代表:访问b值对应的存储空间(也就是变量a的存储空间)
        // 相当于a = 10;
        *b = 10;
        
        printf("%d
    ", a);
        
        a = 11;
        
        // 这里的*b相当于取出变量a存储的值
        printf("%d
    ", *b);
    }
    
    void test1() {
        char a = 10;
        
        char *b = &a;
        /* 相当于下面两句
         char *b;
         b = &a;
         */
    }
    
    void test2() {
        // 这是错误的做法
        char *p;
        // 应该在指针确定指向的变量后,再进行相应的操作
        *p = 10;
    }
    
    void test3() {
        // 这个错发也是错误的
        char *p;
        // 指针变量是用来存储变量地址的,不能随便赋值一个常数,除非你这个常熟恰好是某个变量的地址
        p = 100;
    }
    
    int main(int argc, const char * argv[])
    {
        
        return 0;
    }
    View Code

    指针-数组-函数参数:

    #include <stdio.h>
    
    // 这个函数用来修改数组的第一个元素
    void change(char c[]) {
        c[0] = 1;
    }
    
    void change2(char *c) {
        // *(c+2) = 10; 修改a[2]的值
        
        c[2] = 10;
    }
    
    int main(int argc, const char * argv[])
    {
        char a[3];
        
        //char *p = a;
        
        change2(a);
        
        printf("a[2]=%d", a[2]);
        
        return 0;
    }
    View Code

    指针例子:计算 差 and 和

    int sumAndMinus(int v1, int v2, int *p) {
        *p = v1 - v2;
        return v1 + v2;
    }
    
    int main(int argc, const char * argv[])
    {
        int a = 10;
        int b = 4;
        
        // 接收a跟b的和
        int sum;
        // 接收a跟b的差
        int minus;
        
        sum = sumAndMinus(a, b, &minus);
        
        printf("sum=%d, mimus=%d", sum, minus);
        return 0;
    }
    View Code

    指针与一维数组:

    void test() {
        int a[2];
        
        int *p;
        
        // p = &a[0];
        p = a;
        
        *p = 10;
        
        printf("%d", a[0]);
    }
    
    void test1() {
        int a[3] = {1, 2, 3};
        
        for (int i = 0; i<3; i++) {
            printf("a[%d]=%d
    ", i, a[i]);
        }
    }
    
    void test2() {
        char a[3] = {1, 2, 3};
        // 让指针指向第一个元素
        char *p = a;
        
        for (int i = 0; i<3; i++) {
            printf("a[%d]=%d
    ", i, *(p+i));
        }
    }
    
    void test3() {
        int a[3] = {1, 2, 3};
        // 让指针指向第一个元素
        int *p = a;
        
    //    p == ffc1
    //    p + 1 == ffc3
    //    p + 2 == ffc5
        
        // 遍历完数组后,p的值并没有变过
        for (int i = 0; i<3; i++) {
            printf("a[%d]=%d
    ", i, *(p+i));
        }
    }
    
    void test4() {
        int a[3] = {1, 2, 3};
        // 让指针指向第一个元素
        int *p = a;
        
        // 在遍历数组的过程中,指针的值一直在改变
        for (int i = 0; i<3; i++) {
            printf("a[%d]=%d
    ", i, *(p++));
        }
    }
    
    void test5() {
        int a[3] = {1, 2, 3};
        
    //    a == ffc1;
    //    a + 1 == ffc3
    //    a + 2 == ffc5
        
        // 不能够写成a++,因为a是个常量
        for (int i = 0; i<3; i++) {
            printf("a[%d]=%d
    ", i, *(a + i));
        }
    }
    
    void test6() {
        int a[3] = {1, 2, 3};
        // 让指针指向第一个元素
        int *p = a;
        
    //    p == a == ffc1
    //    p++ == a + 1 == ffc3
    //    p++ == a + 2 == ffc5
        
        // 在遍历数组的过程中,指针的值一直在改变
        for (int i = 0; p < a + 3; i++, p++) {
            printf("a[%d]=%d
    ", i, *p);
        }
    }
    
    int main(int argc, const char * argv[])
    {
        
        test6();
        return 0;
    }
    View Code

    指针与字符串:

    void test() {
        char s[7] = "itcast";
        
        for (int i = 0; s[i] != ''; i++) {
            printf("%c
    ", s[i]);
        }
    }
    
    void test1() {
        // 定义了一个字符串变量
        char s[7] = "itcast";
        
        char *p = s;
        
        for (; *p != ''; p++) {
            printf("%c
    ", *p);
        }
    }
    
    void test2() {
        // 定义的是字符串常量
        char *p = "itcast";
        
    //    char *p;
    //    
    //    p = "itcast";
        
        for (; *p != ''; p++) {
            printf("%c
    ", *p);
        }
    }
    
    int main(int argc, const char * argv[])
    {
        
        
        // test2();
        
        char *s = "lmj";
        
        *s = 'f';
        
        
        return 0;
    }
    View Code
  • 相关阅读:
    《汇编语言》- 来自底层的较量
    《深入理解java虚拟机》
    《深入理解java虚拟机》
    PHP进阶,使用交互模式进行快速测试实验?
    为什么要拒绝使用大事务进行处理任务?
    一份从0到1的java项目实践清单
    怎样在mybatis里向mysql中插入毫秒数的时间?
    mysql技能提升篇
    如何快速成长?我的java之路!
    微软职位内部推荐-Senior Development Engineer
  • 原文地址:https://www.cnblogs.com/liuwj/p/6899479.html
Copyright © 2011-2022 走看看