zoukankan      html  css  js  c++  java
  • 指针一些理解

    说一下指针的基本用法,(主要是给自己写的,不一定符合大家的胃口欧)

    一、指针易错

    下面是需要注意的。

     在使用已定义好的指针变量时,在变量名前面不能加 *。例如:

    1. int *p,a;
    2. *p=&a; //错误,指针变量是p而不是*p

    而如下语句是正确的。

    1. int a,*p=&a; //正确

    该语句貌似把 &a 赋给了 *p,而实际上 p 前的 * 仅是定义指针变量 p 的标识,仍然是把 &a 赋给了 p,故是正确的赋值语句。

    二、指针与一维数组

    指针

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    void paixu(int *p,int n)
    {
        int *i,*j,t;
        i=p;j=p+n-1;
        for(;i<=j;i++,j--)
        {
            t=*i;
            *i=*j;
            *j=t;
        }
    }
    int main()
    {
        int n,*q1,*q2;
        scanf("%d",&n);
         q1=q2=(int *)malloc(n*sizeof(int));
        for(int i=0;i<n;i++)
        {
            scanf("%d",q1);
            q1++;
        }
        paixu(q2,n);
        for(int i=0;i<n;i++)
        {printf("%d ",*q2);q2++;}
    }
    

      三、指针与字符串

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    void paixu(char **p,int n)
    {
        char a[100];
         for(int i=0;i<n-1;i++)
         {
             for(int j=i+1;j<n;j++)
             {
                 int l=strcmp(p[i],p[j]);
                 if(l>0)
                 {
                     strcpy(a,p[i]);
                      strcpy(p[i],p[j]);
                       strcpy(p[j],a);
                 }
             }
         }
    }
    int main()
    {
        int i,n;
        char t[100],*p[20];
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%s",t);
            int l=strlen(t);
            p[i]=(char *)malloc((l+1));
            strcpy(p[i],t);
        }
        paixu(p,n);
        for(i=0;i<n;i++)
        {
            printf("%s",p[i]);
            printf("
    ");
        }
    }
    

      四、(1)指针和二维数组

                   

                   初步来理解指针和二维数组,就拿a【3】【4】和指针来举例子,就如上表列出来的。分为行指针和列指针。行指针可以通过取星来换成列指针,比如,a表示第0行的首地址,*(a)=*(a+0)+0=a【0】表示第零行第〇列的地址。

    因此我们可以将二维数组换成指针来表示。比如,a【1】【2】的地址就可以用*(a+1)+2来表示,然后如果是表示元素再在前面取星就行啦。

    举个例子:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main()
    {
        int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
        int (*p)[4]=a;//定义一个数组指针是指向含 N 个元素的一维数组的指针
        for(int i=0;i<3;i++)
        {
            for(int j=0;j<4;j++)
            {
                printf("%d ",*(*(p+i)+j));
            }
            printf("
    ");
        }
    }
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main()
    {
        int n,i,j;
        float (*q1)[3],*q2;
        scanf("%d",&n);
        q1=(float(*)[3])malloc(n*3*sizeof(float));
        q2=q1[0];//将q1的首行首列给q2,
        for(i=0;i<n;i++)
        {
            for(j=0;j<3;j++)
            {
                scanf("%f",*(q1+i)+j);
            }
        }
        for(i=0;i<n*3;i++,q2++)
        {
            printf("%f",*q2);
    
        }
        return 0;
    }
    成功不是偶然的,失败也不是必然的。
  • 相关阅读:
    botzone Tetris2
    NOIP2017游记
    城乡联谊胡策会糊厕R3
    SRM 20
    AtCoder Regular Contest 082
    AtCoder Grand Contest 019
    复数模版
    SRM13
    NOI2017&&codeM2017游记
    java多线程编程
  • 原文地址:https://www.cnblogs.com/zhuyukun/p/12650205.html
Copyright © 2011-2022 走看看