• 指针基本操作


    //
    //  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
    ", &a);
    //    return 0;
    //}
    
    //指针变量: 保存变量内存地址的工具
    //本质是变量,保存其它变量的地址
    //int *p = &a;
    //数据类型(指针指向变量的数据类型) + *(指针变量说明符) + 变量名;
    
    //int * 是指针变量的类型
    
    //int main(int argc, const char *argv[])
    //{
    //    int a=100;
    //    int *p = &a;
    //    printf("%p
    ", &a);
    //    printf("%p
    ", p);
    //    
    //    //指针变量也有自己地址
    //    printf("%p
    ", &p);
    //    
    //    return 0;
    //}
    
    //间接寻址 *
    //通过变量的地址寻址到对应地址的变量空间
    //* & 是一对互逆运算符
    
    //int main(int argc,const char *argv[])
    //{
    //    int a=100;
    //    int *p = &a;
    //    
    //    printf("%p
    ", &a);
    //    
    //    printf("a= %d
    ", *p);
    //    printf("a = %d
    ", *&a);
    //    printf("a = %d
    ", a);
    //    
    //    return 0;
    //}
    
    //指针变量的大小
    //只跟平台有关, 32位平台占4字节 64位平台占8字节
    
    //int main(int argc,const char *argv[])
    //{
    //    printf("size = %lu
    ", sizeof(char *));
    //    printf("size = %lu
    ", sizeof(int *));
    //    printf("size = %lu
    ", sizeof(long *));
    //    printf("size = %lu
    ", 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
    ", *q);
    //    *q = 300;
    //    printf("a = %d
    ", *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
    ", *(int *)p);
    //    p = &b;
    //    printf("b = %ld
    ", *(long *)p);
    //    p = &f;
    //    printf("f = %f
    ", *(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
    ", p);
    //    //4.释放内存
    //    free(p);
    //    //5.
    //    p = NULL;
    //    
    //    return 0;
    //}
    
    // 0 '' '
    ' NULL "0" "" ' '
    //
    //int main(int argc, const char *argv[])
    //{
    //    printf("%d", '
    ');
    //    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
    ", *p);
    //    printf("%p
    ", p);
    //    p++;//sizeof(int)
    //    
    //    printf("a[1]=%d
    ", *p);
    //    printf("%p
    ", p);
    //
    //    p++;
    //    printf("a[2]=%d
    ", *p);
    //    printf("%p
    ", p);
    //    
    //    p--;
    //    printf("%p
    ", p);
    //    p--;
    //    printf("%p
    ", p);
    //    
    //    return 0;
    //}
    
    //int main(int argc,const char *argv[])
    //{
    //    char ch= 'a';
    //    char *p = &ch;
    //    printf("%p
    ", p);
    //    p++;
    //    printf("%p
    ", p);
    //    p++;
    //    printf("%p
    ", p);
    //    p++;
    //    printf("%p
    ", p);
    //    return 0;
    //}
    
    //减法运算
    //元素个数
    //不同类型的指针不能进行减法运算
    //指针不能进行加法运算
    int main(int argc, const char *argv[])
    {
        int a[10]={};
        int *p = a;
        int *q = &a[5];
        
        printf("%p %p
    ", p,q);
        printf("%ld
    ",  q-p);//(q - p)/sizeof(int)
        
        return 0;
    }
  • 相关阅读:
    JavaScript -- BATweb笔试面试
    1--html属性
    0--node安装
    1-- express
    lsof命令
    1--字符串和数组的指向问题
    19--复杂链表的复制。
    18--二叉树中和为某一值的路径
    剑指offer——64和为s的数字
    剑指offer——04二维数组中的查找
  • 原文地址:https://www.cnblogs.com/0515offer/p/4548741.html
Copyright © 2020-2023  润新知