zoukankan      html  css  js  c++  java
  • c语言 指针

    指针:c语言的一种高级数据类型,指针的数据类型变量是用来存放其他变量的内存地址,达到间接访问另一个变量的目的;更加方便对数组和字符串的操作;以及函数调用中相互传递数据

    一:变量的指针

    #include<stdio.h>
    int main()
    {
        int a,b,t,* p1,* p2,* p;
        p1 = &a;
        p2 = &b;
    //指针的读取,p1直接指向地址 
        scanf("%d",p1);
        printf("a=%d,a=%d
    ",a,* p1); 
    
    //利用指针进行运算 
        b = 5;
        * p2= * p2 +  5;
        
        printf("b=%d,b=%d
    ",b,* p2);
        
    // 利用指针进行替换操作
        p = p1; p1 = p2; p2 = p;
        
        printf("a=%d,b=%d
    ",* p1,* p2);
             
        return 0;
    }

    二:数组指针

    ①一维数组

    #include<stdio.h>
    #define N 5
    
    int main()
    {
        int a[N],* p,i; 
        int sum=0;
        float aver;
        p = a;
    
    //利用指针计算求和 
        for(i=0;i<N;i++){
            scanf("%d",p+i);
            sum += * (p+i);
        }
    
        aver = sum*1.0 /N;
        
    //利用循环找大于平均值    
        for(i=0;i<N;i++){
            if(* (p+i) > aver){
                printf("%d bigger than aver
    ",* (p+i));
            }
        } 
    
            return 0;
    }

    ②二维数组

    (1)通过列指针操作数组

    #include<stdio.h>
    
    //采用列的方式处理二维指针 
    int main()
    {
        int i,j,a[2][3] = {{1,3,5},{2,4,6}},* p;
        p = &a[0][0];
        
        for(i=0;i<6;i++){
            printf("%d",*p++);
        }
        printf("
    ");
        
        p = &a[0][0];
    
    //当a[0][2]时,p+1将会指向第二行,即a[2][0] 
        for(i=0;i<2;i++){
            for(j=0;j<3;j++){
                printf("%d",*p+i*3+j);
            }
            printf("
    ");
        } 
        
        return 0;
     } 

    (2)通过行指针操作数据

    #include<stdio.h>
    
    //采用行的方式处理二维指针 
    int main()
    {
        int i,j,a[2][3] = {{1,3,5},{2,4,6}};
    //在使用行指针的时候,必须指定每一行的元素个数,例如指定每行为3个元素    
        int (* p)[3];
        p = a;
    
        for(i=0;i<2;i++){
            for(j=0;j<3;j++){
                printf("%d",*(*(p+i)+j));
            }
            printf("
    ");
        } 
        
        return 0;
     } 

    三:字符串指针

    ①字符串数组

    #include<stdio.h>
    
    int main()
    {
        char * s;
        s = "I love China!"; 
        
        printf("%s
    ",s); 
    
        return 0;
    }

    ②字符串的大小比较

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        const char *s1="aaa",*s2="bbb",*s3="ccc",*s;
        
        if (strcmp(s1,s2)<0){
            s = s1;
            s1 = s2;
            s2 = s;
        }
        
            if (strcmp(s1,s3)<0){
            s = s1;
            s1 = s3;
            s3 = s;
        }
        
            if (strcmp(s2,s3)<0){
            s = s2;
            s2 = s3;
            s3 = s;
        }
        
        puts(s1);
        puts(s2);
        puts(s3);
        
        return 0;
    }

    ③字符串的复制

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char a[10],b[10],*s1,*s2;
        
        s1 = a;
        s2 = b;
        
        gets(a);
        
        while(*s1){
            * s2 = * s1;
            s2++;
            s1++;
        }
        
        *s2 = '';
        
        puts(a);
        puts(b);
        
        return 0;
    }

    ④字符串的拼接

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char a[10],b[10],*s1,*s2;
        
        s1 = a;
        s2 = b;
        
        gets(a);
        gets(b);
    
        while(*s1) s1++;
        while(*s1++ = *s2++);
        
        puts(a);
        puts(b);
        
        
        
        return 0;
    }
    非学无以广才,非志无以成学。 正是因为今天的不完美,才对未来充满希望。 ----长帆
  • 相关阅读:
    Java多态(更新中...)
    C语言free释放内存后为什么指针里的值不变?竟然还可以输出?
    LeetCode:344-反转字符串
    20150518 字符设备驱动
    20150517 Linux文件系统与设备文件系统
    20150514我读《深入理解linux内核》之虚拟文件系统笔记
    双系统Ubuntu下修复启动项的两种方法
    20150503 imx257下实现I2C驱动的四种方法
    20150502 调试分析之 使用gdb远程调试ARM开发板
    20150501 调试分析之 修改内核来定位系统僵死问题
  • 原文地址:https://www.cnblogs.com/changfan/p/11660870.html
Copyright © 2011-2022 走看看