• iOS学习笔记---c语言第八天


    指针

    首先将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a,间接读写变量a的值。用来存放变量地址的变量,就称为"指针变量"

    int *p=null;   初始值:null恒等于0          变量类型:整型指针 int *

    指针变量所占字节数只于操作系统有关

    指针类型转换符%p

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

        //c语言定义指针的时候,喜欢使用p,q,r等。
        int *p = NULL;
        //我们通常所说的指针,指的是指针变量
        //指针变量时存放内存地址(内存编号)的变量。
        printf("%p",p);

    取地址符&

    int a = 3; int *p = &a;

    取值运算符*

        int a = 3;
        int *p = &a;
        printf("%d
    ",*p);
        char c = 'd';
        char *q = &c;
        printf("%c
    ",*q);

    指针的赋值代表指针的重指向。

     

     指针的算术运算    只有加减运算

    int*p = &a;         注意:指针类型决定移动几个字节

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

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

    数组的内存地址

    数组;用连续内存空间存储数据的构造类型                数组名:数组元素首地址

    eg:int array[3]={1,3,8};//array 恒等于 &array[0]

        int arr[5] = {10,78,25,56,24};
        int *p = arr;
        *(p+2) = 52;//间接操作
        arr[2] = 52;//直接操作
        for (int i = 0; i<5; i++) {
            printf("%d ",arr[i]);
        }

    数组名是一个常量指针 不能被修改  下面是错误写法     arr=p;  //arr是常量数组名,p是指针变量

     指针与数组的区别

    1.所占空间不同

    -指针:只于操作系统位数有关

    -数组:与元素个数和类型有关

    2.数组名是常量地址,不能被赋值

    思考:数组元素类型和指针类型不匹配会怎么样?

        short a[4] = {3,7,9,1};
        int *p1 = a;
        char *p2 = a;
        printf("%d
    ",*p1);
        printf("%d",*p2);

    //输出458755         3                    从低到高   00000011   00000000    00000111    00000000     00001001  00000000   00000001   00000000

    int *p1  中a变成   00000000   00000111  00000000   00000011    四个字节

    char *p2   中a变成   00000011     一个字节

    指针与字符串

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

        char string[] = "iphone";//string为数组名
        char *p = string;//指向字符数组首地址
        *(p+1) = 'v';//操作单个字符
        printf("%s",p + 1);//操作整个字符串
    //输出vphone

    指针数组

    存放指针的数组为指针数组

    eg:char *string[3] = {"ios","android","win8"};

        char *p1 = "iOS";
        char *p2 = "Android";
        char *p3 = "win8";
        char *string[3] = {p1,p2,p3};
        //char *string[3] = {"iOS","Android","win8"};
        for (int i = 0; i<3; i++) {
            printf("%s ",string[i]);
        }
        printf("
     %c",*(string[1]+4));//输出o
        printf("
     %c",string[1][4]);//输出o

    可以用指针修改字符数组,但不可修改常量字符串

    指针函数

    void swap(int x,int y) {
        int temp = x;
        x = y;
        y = temp;
        printf("x = %d y = %d
    ",x,y);
    }
    void swap2(int *x,int *y)
    {
        printf("---*x = %d,*y = %d",*x,*y);
        int temp = *x;
        *x = *y;
        *y = temp;
        printf("---*x = %d,*y = %d",*x,*y);
    }
    int main(int argc, const char * argv[])
    {
        int a = 10,b = 20;
    //    swap(a,b);
        swap2(&a, &b);
        
        printf("a = %d b = %d",a,b);

    swap不能使a,b交换,,,swap2可以使a,b交换

  • 相关阅读:
    导入别人的flex项目出现的问题
    HTTP通信原理
    java 代码的细节优化
    跨服务器之间的session共享
    spring整合hibernate配置文件
    java中时间类型的问题
    Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:
    并发处理方案 个人总结
    MsSqlserver 查看锁表与解锁
    c# CTS 基础数据类型笔记
  • 原文地址:https://www.cnblogs.com/limicheng/p/3792288.html
Copyright © 2020-2023  润新知