zoukankan      html  css  js  c++  java
  • c-指针

    C-8-指针C-8-指针

     
     

     

    // 简单的指针

    void fun1();

    void fun1()

    {

        // 创建一个空得指针

        // NULL很等于0

        int *p = NULL;

        // int *:指针类型

        

        // 指针所占字节大小只有操作系统有关,在64位操作系统下,指针占用8个字节,在32位操作系统下,指针占用4个字节

        unsigned long pointSize = sizeof(p);

        

        // 打印指针变量的值

        printf("%lu", pointSize);

    }

     

     

    // 取地运算符

    void fun2();

    void fun2()

    {

        // 取址运算符

        int a = 3;

        int *p1 = &a;

        printf("&a = %p ", &a);

        printf("p1 = %p ", p1);

    }

     

     

    // 取值运算符

    void fun3();

    void fun3()

    {

        // 取值运算符

        int a1 = 3, b1 = 5;

        int *p2 = &a1;

        printf("a = %d ", *p2);

        p2 = &b1;

        *p2 = 100;

        printf("b1 = %d ", b1);

        // * 和 & 是配套的操作符

    }

     

     

     

    // 指针的算数运算

    void fun4();

    void fun4()

    {

        // 指针的算术运算

        int a = 10;

        int *p = &a;

        p++; // 向高位移动4个字节

        p--; // 向低位移动4个字节

        

        // 指针移动几个字节,取决于指针的类型

        

        // 指针的算数运算

        int *p2 = &a;

        printf("%d ", *p2);

        p2++;    // 向高位地址移动四个字节

        printf("p++ = %d ", *p2);

        p2--;    // 向低位地址移动四个字节

        printf("p-- = %d ", *p2);

        // 打印出来的结果是不确定的,可能是

        // 移动多少位取决于你指针的类型,整形指针移动4个字节,float指针移动4个字节,double指针移动8个字节,char指针移动1个字节,short指针移动2个字节

        // 注意:指针的运算只有加减,没有乘除

    }

     

     

     

    // 指针的重指向

    void fun5();

    void fun5()

    {

        // 指针的重指向

        int a4 = 4, b4 = 5;

        int *p4 = &a4;

        p4 = &b4;

        printf("%d", *p4);

        // 指针变量的赋值意味着重指向

        

        // 指针变量的重指向

        int num1 = 10, num2 = 20;

        int *point = &num1;

        printf("point = %d ", *point);

        point = &num2;

        printf("point = %d ", *point);

    }

     

     

     

    // 指针与数组

    void fun6();

    void fun6()

    {

        // 指针与数组

        // 数组:用连续内存空间存储数据的构造类型

        // 数组名:数组元素首地址

        int array[3] = {1, 3, 8};

        // array <=> &array[0] // array的意思和&array[0]是相同的

        

        // 指针指向数组

        int *arrayPoint = array;

        // 此时arrayPoint 与 array 相同

        

        // 取出数组中的第一个元素

        int element1 = array[0];

        int element11 = *arrayPoint;

        printf("element = %d element11 = %d ", element1, element11);

        

        

        // 指针可以当数组名使用,数组名也可以当指针来使用

        int *p = array;

        printf("%d  %d ", p[0], array[0]);

        printf("%d  %d ", *p, *array);

        

        

        // 指针与数组的区别

        // 1. 指针的大小只取决于操作系统,与指针的类型无关。数组的大小与数组元素类型和数组元素个数有关

        // 2. 数组名是常量地址,不能重指向,指针可以重指向

        

        // 思考?

        // 使用指针能否计算出数组元素个数?

        // 答案:使用指针可以计算出字符串的长度,因为有结束标示‘’,不可以计算其它类型的数组长度,没有结束标示

     

        

        // 使用不同类型的指针指向数组,不会崩溃,但是得到的结果不是错误的

       
        short a[4] = {3 , 7 , 9 , 1};
        int    *p1 = a;
        char   *p2 = a;

    }

     

     

     

    // 指针与字符串

    void fun7();

    void fun7()

    {

        // C语言使用字符数组保存字符串

       
        char string[10] = "iPhone";

        

        // string为数组名,同时也是数组的首地址。

        char *p = string;

       
        // 如何使用p输出字符串。

        printf("%s ", p);

        

        

        // 字符指针可以操作单个字符,也可以操作字符串。

        char str[] = "Macbook Pro";

        char *str1 = "MacBook Air";

        

        // 字符数组中的字符可以修改

        str[0] = 'm';

        printf("str = %s ", str);

        // 指针指向的字符串不可以修改,因为字符串处在常量去,但是指针可以重指向

        // str1[0] = 'm'; // 不可以修改

        str1 = "Mac Pro";

        printf("str1 = %s ", str1);

    }

     

     

    // 练习1

    void pratice1();

    void pratice1()

    {

        // 使用指针计算计算字符串的长度

        char string[] = "iPhone";

        char *p = string;

        

        int count = 0;

        while (*p++ != '') {

            count ++;

        }

        

        printf("字符串长度是:%d", count);

    }

     

     

    // 指针数组

    void fun8();

    void fun8()

    {

        // 指针数组

        char *string[] = {"iOS", "Android", "WP8"};

        

        // 循环取值

        for (int i = 0; i < 3; i++) {

            printf("%s ", string[i]);

        }

    }

     

     

     

    // 指针与函数

    void change(int *a, int *b);

    void change(int *a, int *b)

    {

        int temp = *a;

        *a = *b;

        *b = temp;

    }

     

    void fun9();

    void fun9()

    {

        // 使用函数,交换两个实参的值

        int a = 10, b = 20;

        printf("交换前:a = %d  b = %d ", a, b);

        change(&a, &b);

        printf("交换后:a = %d  b = %d ", a, b);

        

    }

     

     

     

     

    int main(int argc, const char * argv[])

    {

     

        // 注意:*p :其中的‘*’是有两层意义的

        // 在定义指针变量的时候,‘*’的作用是告诉编译器,这就是一个指针

        // 在通过指针取值的时候,‘*’的作用是取值运算符,是访问内存地址为p的存储区域

        

        

        

        // '*'的不同作用:

        // 指针变量定义时: 只起修饰作用,告诉编译器p是指针

        // 指针变量取值时: 访问内存地址为p的存储区域

        

        

        // 简单总结

        // 指针变量是存放地址的变量,指针变量的赋值,意味着指针的重指向。

        // 数组名代表数组的首地址,而且是常量地址,不可以修改。

        // 函数调用时,形参拷贝了实参的值。

        

        

        return 0;

    }

     

     (2014-07-26 12:02:09)

     

    // 简单的指针

    void fun1();

    void fun1()

    {

        // 创建一个空得指针

        // NULL很等于0

        int *p = NULL;

        // int *:指针类型

        

        // 指针所占字节大小只有操作系统有关,在64位操作系统下,指针占用8个字节,在32位操作系统下,指针占用4个字节

        unsigned long pointSize = sizeof(p);

        

        // 打印指针变量的值

        printf("%lu", pointSize);

    }

     

     

    // 取地运算符

    void fun2();

    void fun2()

    {

        // 取址运算符

        int a = 3;

        int *p1 = &a;

        printf("&a = %p ", &a);

        printf("p1 = %p ", p1);

    }

     

     

    // 取值运算符

    void fun3();

    void fun3()

    {

        // 取值运算符

        int a1 = 3, b1 = 5;

        int *p2 = &a1;

        printf("a = %d ", *p2);

        p2 = &b1;

        *p2 = 100;

        printf("b1 = %d ", b1);

        // * 和 & 是配套的操作符

    }

     

     

     

    // 指针的算数运算

    void fun4();

    void fun4()

    {

        // 指针的算术运算

        int a = 10;

        int *p = &a;

        p++; // 向高位移动4个字节

        p--; // 向低位移动4个字节

        

        // 指针移动几个字节,取决于指针的类型

        

        // 指针的算数运算

        int *p2 = &a;

        printf("%d ", *p2);

        p2++;    // 向高位地址移动四个字节

        printf("p++ = %d ", *p2);

        p2--;    // 向低位地址移动四个字节

        printf("p-- = %d ", *p2);

        // 打印出来的结果是不确定的,可能是

        // 移动多少位取决于你指针的类型,整形指针移动4个字节,float指针移动4个字节,double指针移动8个字节,char指针移动1个字节,short指针移动2个字节

        // 注意:指针的运算只有加减,没有乘除

    }

     

     

     

    // 指针的重指向

    void fun5();

    void fun5()

    {

        // 指针的重指向

        int a4 = 4, b4 = 5;

        int *p4 = &a4;

        p4 = &b4;

        printf("%d", *p4);

        // 指针变量的赋值意味着重指向

        

        // 指针变量的重指向

        int num1 = 10, num2 = 20;

        int *point = &num1;

        printf("point = %d ", *point);

        point = &num2;

        printf("point = %d ", *point);

    }

     

     

     

    // 指针与数组

    void fun6();

    void fun6()

    {

        // 指针与数组

        // 数组:用连续内存空间存储数据的构造类型

        // 数组名:数组元素首地址

        int array[3] = {1, 3, 8};

        // array <=> &array[0] // array的意思和&array[0]是相同的

        

        // 指针指向数组

        int *arrayPoint = array;

        // 此时arrayPoint 与 array 相同

        

        // 取出数组中的第一个元素

        int element1 = array[0];

        int element11 = *arrayPoint;

        printf("element = %d element11 = %d ", element1, element11);

        

        

        // 指针可以当数组名使用,数组名也可以当指针来使用

        int *p = array;

        printf("%d  %d ", p[0], array[0]);

        printf("%d  %d ", *p, *array);

        

        

        // 指针与数组的区别

        // 1. 指针的大小只取决于操作系统,与指针的类型无关。数组的大小与数组元素类型和数组元素个数有关

        // 2. 数组名是常量地址,不能重指向,指针可以重指向

        

        // 思考?

        // 使用指针能否计算出数组元素个数?

        // 答案:使用指针可以计算出字符串的长度,因为有结束标示‘’,不可以计算其它类型的数组长度,没有结束标示

     

        

        // 使用不同类型的指针指向数组,不会崩溃,但是得到的结果不是错误的

       
        short a[4] = {3 , 7 , 9 , 1};
        int    *p1 = a;
        char   *p2 = a;

    }

     

     

     

    // 指针与字符串

    void fun7();

    void fun7()

    {

        // C语言使用字符数组保存字符串

       
        char string[10] = "iPhone";

        

        // string为数组名,同时也是数组的首地址。

        char *p = string;

       
        // 如何使用p输出字符串。

        printf("%s ", p);

        

        

        // 字符指针可以操作单个字符,也可以操作字符串。

        char str[] = "Macbook Pro";

        char *str1 = "MacBook Air";

        

        // 字符数组中的字符可以修改

        str[0] = 'm';

        printf("str = %s ", str);

        // 指针指向的字符串不可以修改,因为字符串处在常量去,但是指针可以重指向

        // str1[0] = 'm'; // 不可以修改

        str1 = "Mac Pro";

        printf("str1 = %s ", str1);

    }

     

     

    // 练习1

    void pratice1();

    void pratice1()

    {

        // 使用指针计算计算字符串的长度

        char string[] = "iPhone";

        char *p = string;

        

        int count = 0;

        while (*p++ != '') {

            count ++;

        }

        

        printf("字符串长度是:%d", count);

    }

     

     

    // 指针数组

    void fun8();

    void fun8()

    {

        // 指针数组

        char *string[] = {"iOS", "Android", "WP8"};

        

        // 循环取值

        for (int i = 0; i < 3; i++) {

            printf("%s ", string[i]);

        }

    }

     

     

     

    // 指针与函数

    void change(int *a, int *b);

    void change(int *a, int *b)

    {

        int temp = *a;

        *a = *b;

        *b = temp;

    }

     

    void fun9();

    void fun9()

    {

        // 使用函数,交换两个实参的值

        int a = 10, b = 20;

        printf("交换前:a = %d  b = %d ", a, b);

        change(&a, &b);

        printf("交换后:a = %d  b = %d ", a, b);

        

    }

     

     

     

     

    int main(int argc, const char * argv[])

    {

     

        // 注意:*p :其中的‘*’是有两层意义的

        // 在定义指针变量的时候,‘*’的作用是告诉编译器,这就是一个指针

        // 在通过指针取值的时候,‘*’的作用是取值运算符,是访问内存地址为p的存储区域

        

        

        

        // '*'的不同作用:

        // 指针变量定义时: 只起修饰作用,告诉编译器p是指针

        // 指针变量取值时: 访问内存地址为p的存储区域

        

        

        // 简单总结

        // 指针变量是存放地址的变量,指针变量的赋值,意味着指针的重指向。

        // 数组名代表数组的首地址,而且是常量地址,不可以修改。

        // 函数调用时,形参拷贝了实参的值。

        

        

        return 0;

    }

     

  • 相关阅读:
    C# Socket TcpClient 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。
    C#编程使用Managed Wifi API连接无线SSID
    中国最精确的电子地图,可以找到你家哦
    利用mysql数据库中的TMD表修复“is marked as crashed and last (automatic?) repair failed”的错误 Database query error
    Google Directions API 中路线编码解析
    c语言 nmealib-0.5.3 学习 简单代码 ,供参考
    【转】IT管理人才必备的十大能力
    【转】10个让人受益的管理原理
    【转】耐心看
    【转】对于移动APP测试的一个小技巧
  • 原文地址:https://www.cnblogs.com/iOS-mt/p/4091215.html
Copyright © 2011-2022 走看看