指针基本操作

//

//  main.c

//  指针基本操作

//

//  Created by zhangxueming on 15/6/3.

//  Copyright (c) 2015年 zhangxueming. All rights reserved.

//



#include <stdio.h>

//地址:

//变量定义在内存中, 也有自己的地址

//int a;

//通过&获取变量在内存中的位置



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

//    int a=100;

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

//    return 0;

//}



//指针变量: 保存变量内存地址的工具

//本质是变量,保存其它变量的地址

//int *p = &a;

//数据类型(指针指向变量的数据类型) + *(指针变量说明符) + 变量名;



//int * 是指针变量的类型



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

//{

//    int a=100;

//    int *p = &a;

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

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

//    

//    //指针变量也有自己地址

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

//    

//    return 0;

//}



//间接寻址 *

//通过变量的地址寻址到对应地址的变量空间

//* & 是一对互逆运算符



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

//{

//    int a=100;

//    int *p = &a;

//    

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

//    

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

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

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

//    

//    return 0;

//}



//指针变量的大小

//只跟平台有关, 32位平台占4字节 64位平台占8字节



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

//{

//    printf("size = %lu\n", sizeof(char *));

//    printf("size = %lu\n", sizeof(int *));

//    printf("size = %lu\n", sizeof(long *));

//    printf("size = %lu\n", sizeof(double *));

//    return 0;

//}



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

//{

//    int a=100;

//    int *p= &a;

//    int *q= p;//指针变量可以直接给指针变量赋值

//    

//    *p = 200;

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

//    *q = 300;

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

//    

//    return 0;

//}



//泛型指针

//void *



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

//{

//    int a=100;

//    long b = 200;

//    float f=3.14;

//    

//    void *p = &a;

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

//    p = &b;

//    printf("b = %ld\n", *(long *)p);

//    p = &f;

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

//    

//    return 0;

//}



//空指针

//NULL

//#define NULL  ((void *)0)



//野指针

//1. 定义了指针变量后没有给初值

//2. 指针变量指向的内存空间被释放

#include <stdlib.h>



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

//{

//    char *p=NULL;

//    //1.申请内存

//    p = (char *)malloc(100);

//    //2.判断内存是否申请成功

//    if(!p)

//    {

//        return -1;

//    }

//    //3.使用内存

//    scanf("%s", p);

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

//    //4.释放内存

//    free(p);

//    //5.

//    p = NULL;

//    

//    return 0;

//}



// 0 '\0' '\n' NULL "0" "\0" ' '

//

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

//{

//    printf("%d", '\n');

//    return 0;

//}



//指针运算



//++ --

//指针变量改变的长度为指针指向的数据类型的长度



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

//{

//    int a[10]={1,2,3,4,5,6,7,8,9,10};// a[0] int  &a[0] int *

//    int *p = a;

//    

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

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

//    p++;//sizeof(int)

//    

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

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

//

//    p++;

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

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

//    

//    p--;

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

//    p--;

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

//    

//    return 0;

//}



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

//{

//    char ch= 'a';

//    char *p = &ch;

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

//    p++;

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

//    p++;

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

//    p++;

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

//    return 0;

//}



//减法运算

//元素个数

//不同类型的指针不能进行减法运算

//指针不能进行加法运算

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

{

    int a[10]={};

    int *p = a;

    int *q = &a[5];

    

    printf("%p %p\n", p,q);

    printf("%ld\n",  q-p);//(q - p)/sizeof(int)

    

    return 0;

}

 

你可能感兴趣的:(基本操作)