指针

来源:互联网 发布:java毕业论文设计题目 编辑:程序博客网 时间:2024/05/22 05:27

//数据的直接引用

    int a = 10;

    //定义指针数据类型/复合类型

    //int* p = NULL;      //p是指针类型的变量,存放指针&a

    //p = &a;

    //定义存放指针p的地址的指针

    //int** pp = &p;

    //指针是由指针的指向类型和*构成,且指向类型可以是任何C语言合法的数据类型

    //printf("a=%d\n",a);    //数据的读取动作就叫引用

    

    //数据类型分析法

//    int** pp;  //类型为int**

//    int* *pp;  //类型为int*

//    int **pp;  //类型int

//    int array[5];

    

   // p = &array[0];

    //printf("p=%p\n",p);

//    p = &array[1];

    //printf("p=%p\n",p+1);   //指针+1代表地址往后偏移1*sizeof(指针的指向类型)

    //printf("p=%p\n",p-1);   //指针-1代表地址往前偏移1*sizeof(指针的指向类型)

    //printf("p=%p\n",++p);    //p=p+1 == ++p;

    //间接引用   "*"--间址运算与

//    printf("*p=%d,a=%d\n",*p,a);

//    printf("pp=%p\n",pp);

    //指针就是有效的内存地址

    

//    printf("&a=%p\n",&a);    //打印的是变量在内存中的首地址

//    printf("&p=%p\n",&p);   //打印指针变量p的首地址

//    printf("sizeof(a)=%lu\n",sizeof(a));

//    printf("p=&a:%p\n",p);

//    printf("sizeof(p)=%lu\n",sizeof(p));

    

//    int* const pc = &a;   // -----只读指针/常量指针

//    PC++ //ERROR

//    *pc = 30  //将更改a空间里的数据内容

//    const int* pc = &a; == const int *pc = &a;    //只能读指向的内容,不能更改指向的int内容 ---常指向指针

//    *pc = 30; // error

    

    int array[5];

    //int* p = &array[0];

    int* p = array;       //数组名里面直接保存了数组的首地址---数组名是只读的指针变量

    int** pp = &p;

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

        printf("请输入第%d的数据:",i);

        scanf("%d",(*pp)++);

    }

    p = &array[0];

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

        printf("array[%d]=%d\n",i,*(*pp)++);

    }

    

    return 0;

}

***********************************************************************************************************************************

无效指针:

int* p = NULL       //等于 (void*)0x0  ------------>泛型指针

当指针值为null值时,不能引用null值空间的内容,若引用的话将引发段错误(段保护错误),对无效地址的间址引用都将引发段错误

lldb——————>段错误

野指针:

使用指针初始化必须为NULL,并且用完后要将这个指针赋NULL,不然将出现野指针

ptr = 0xffffffff;


swap(int a,int b)  —————————>传值引用

swap(int* a, int* b)  ——————————>传址引用

0 0