南京師範大学のトレーニングプログラムは、9を再テスト

列5および出力をソートするための方法へのポインタ(ポインタ)と81ポインタ

#include <stdio.h>
#include <string.h>
void sort(char **p,int n)
{
    int i,j;
    char *temp;
    for(i=0; i<n-1; i++)
    {
        for(j=0; j<n-i-1; j++)
            if(strcmp(*(p+j),*(p+j+1))>0)
            {
                temp=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=temp;
            }
    }
}
int main()
{
    const int N=5;
    int i;
    char **p,*pstr[N],str[N][20];
    for(i=0; i<N; i++)
        pstr[i]=str[i];//将第i个字符串的首地址赋予指针数组pstr的第i个元素
    for(i=0; i<N; i++)
        scanf("%s",pstr[i]);
    p=pstr;
    printf("排序后:\n");
    sort(p,N);
    for(i=0; i<N; i++)
    {
        printf(pstr[i]);
        printf("\n");
    }

    printf("\n");
    return 0;
}

結果:

82. A要素の値のいずれか一項に記載の任意の出力ラインに係る2次元アレイ(ポインタ)

#include <stdio.h>

int main()
{
    int a[3][4]= {1,3,5,7,9,11,13,15,17,19,21,23};
    int (*p)[4],i,j;    //指针变量p指向包含4个整型元素的一维数组
    p=a;
    scanf("%d %d",&i,&j);
    printf("a[%d][%d]=%d\n",i,j,*(*(p+i)+j));   //输出a[i][j]
    return 0;
}

結果:

83.次に、列B、出力ストリングB(ポインタ)としてコピーした文字列

#include <stdio.h>

int main()
{
    char a[]="I am a student.",b[20];
    int i;
    for(i=0; *(a+i)!='\0'; i++)   //逐个值进行复制
        *(b+i)=*(a+i);
    *(b+i)='\0';
    printf("%s\n",b);
    return 0;
}
#include <stdio.h>

void copy_string(char *from,char *to)   //从from传给to
{
    while((*to=*from)!='\0')
    {
        to++;
        from++;
    }
}

int main()
{
    char a[]="I am a student.",b[20],*p1,*p2;
    p1=a;
    p2=b;
    copy_string(p1,p2);  //从p1传给p2
    printf("%s\n",b);
    return 0;
}

結果:

84可変フォーマット出力機能

#include <stdio.h>

int main()
{
    int a;
    float b;
    scanf("%d %f",&a,&b);
    char *format;    //等同于char format[]="a=%d   b=%.2f\n";
    format="a=%d   b=%.2f\n";
    printf(format,a,b);
    return 0;
}

結果:

ポインタ変数を介してアクセス機能に85ポイント

#include <stdio.h>

int max(int a,int b)
{
    if(a>b)
        return a;
    return b;
}

int min(int a,int b)
{
    if(a<b)
        return a;
    return b;
}

int main()
{
    int (*p)(int,int);    //p为一个指向函数的指针变量
    int a=1,b=2,n,c;
    scanf("%d",&n);
    if(n==1)
        p=max;    //通过指针变量调用max函数
    else if(n==2)
        p=min;
    c=(*p)(a,b);  //p的作用是将函数max的入口地址赋给指针变量p
    if(n==1)
        printf("max=%d\n",c);
    else if(n==2)
        printf("min=%d\n",c);

    return 0;
}

結果:

86アルファベット順(昇順)出力(ポインタ配列)の文字列の複数

 

#include <stdio.h>
#include <string.h>
void sort(char *name[],int n)
{
    char *temp;
    int i,j,k;
    for(i=0; i<n-1; i++)
    {
        k=i;
        for(j=i+1; j<n; j++)
            if(strcmp(name[k],name[j])>0)
                k=j;
        if(k!=i)  //不是移动字符串,而是改变指针数组的各元素的指向
        {
            temp=name[i];
            name[i]=name[k];
            name[k]=temp;
        }
    }
}

void print(char *name[],int n)
{
    int i;
    for(i=0; i<n; i++)
        printf("%s\n",name[i]); //name[i]相当于一个一维数组的地址
}

int main()
{
    char *name[]= {"Follow me","BASIC","Great Wall","FORTRAN","Computer Design"};
    int n=5;    //指针数组,每个元素存放一个地址,相当于一个指针变量
    sort(name,n);
    print(name,n);

    return 0;
}

結果:

87.データポインタ変数へのポインタを使用します

#include <stdio.h>

int main()
{
    char *name[]= {"Follow me","BASIC","Great Wall","FORTRAN","Computer Design"};
    char **p;   //p为指向指针的指针
    int i;
    for(i=0; i<5; i++)
    {
        p=name+i;   //p先指向name[0]的地址,*p取出name[0]的值
        printf("%s\n",*p);
    }
    return 0;
}

結果:

88ポインタ変数データへのポインタを有する各要素整数アレイの出力値

#include <stdio.h>

int main()
{
    int a[5]= {1,3,5,7,9};
    int *num[5]= {&a[0],&a[1],&a[2],&a[3],&a[4]};
    int **p,i;
    p=num;   //p的值为&num[0]
    for(i=0; i<5; i++)
    {
        printf("%d ",**p);  //*p为&a[0],**p为a[0]
        p++;
    }
    printf("\n");
    return 0;
}

結果:

89主パラメータとして関数へのポインタの配列

#include <stdio.h>

int main(int argc,char *argv[])   //argc代表个数
{
    while(argc>1)
    {
        ++argv;
        printf("%s\n",*argv);  //*argv[]相当于**argv,所以*argv相当于字符串首地址
        --argc;
    }
    return 0;
}

INTメイン(int型ARGC、CHAR * ARGV [])

// ARGCコマンドラインのパラメータの数であり、argv配列は、文字列へのポインタであります

たとえば:コマンドラインは、中国北京をddを

ARGV [0] file1を\ 0

       ARGV [1]中国\ 0

       ARGV [2]北京\ 0

出力は中国です

                     北京

以下のように実行します。

まず、Windowsの+ Rは、プロジェクトを実行するために、ファイルを見つけ、DOSを開き、\ binに\デバッグ、以下のexeファイルを開くには

デバッグを入力し、DOSで入力します。dd中国北京(プロジェクトファイルを実行しているDD)

90. 2つのパラメータ主な機能として文字の配列

#include <stdio.h>

int main(int argc,char *argv[])   //argc代表个数
{
    int sum=0;
    while(--argc>0)
        sum+=*argv[argc]-'0';
    printf("%d\n",sum);
    return 0;
}

DOS入力:DD 12 34 56 78

演算結果出力:16(1 + 3 + 5 + 7 = 16)

どこで:

ARGV [0] 12であり; * ARGV [0]が1であります

ARGV [1] 34であり; * ARGV [1] 3

ARGV [2] 56であり; * ARGV [2] 5

ARGV [3] 78; * ARGV [3]は7

公開された462元の記事 ウォン称賛55 ビュー320 000 +

おすすめ

転載: blog.csdn.net/LY_624/article/details/105103698