列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