zoukankan      html  css  js  c++  java
  • 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交换

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法训练 排列问题
    Java实现 蓝桥杯VIP 算法训练 排列问题
    Java实现 蓝桥杯VIP 算法训练 排列问题
    Java实现 蓝桥杯VIP 算法训练 排列问题
    关于模态/非模态对话框不响应菜单的UPDATE_COMMAND_UI消息(对对WM_INITMENUPOPUP消息的处理)
  • 原文地址:https://www.cnblogs.com/limicheng/p/3792288.html
Copyright © 2011-2022 走看看