今週は,C言語を学習する上でもっとも挫折することの多い,でも,C言語のもっともC言語らしいところである,ポインタについて取り上げます.
まずは,その前に前期の復習と行きましょう.
例:入力された文字列“test”→結果“estt”
#include <stdio.h>
void main()
{
char s[256], t;
int n, i, j;
//文字列の入力
printf("単語を入力してください\n");
scanf("%s", s);
printf("入力された文字列は%sです.\n", s);
// 文字数を数える
for(i=0; s[i] != 0x00; i++);
printf("文字数は,%d文字です.\n", i);
n = i;
// 並び替え
for(i=0; i < n-1; i++){
for(j=i+1; j < n; j++){
if(s[i] > s[j]){
t = s[i];
s[i] = s[j];
s[j] = t;
}
}
}
printf("結果 : %s\n", s);
}
データのメモリアドレスを指し示す(ポイントする)ための変数
ポインタ変数の値 = メモリアドレス
参考 : 普通の変数の値 = 数値や文字
#include <stdio.h>
void main()
{
char a;
short b;
printf("aのアドレスは,%x,bのアドレスは%x \n", &a, &b);
}
例:
#include <stdio.h>
void main()
{
int a,b;
char *p;
a = 3;
p = &a;
b = *p;
printf("%d", b);
}
まずは,例から:
#include <stdio.h>
void main()
{
char src[20] = "Thank you.";
int i;
char *p;
p = &src[0];
printf("文字列=");
for(i=0; src[i] != '\0'; i++){
printf("%c", *(p+i));
}
}
ここで, p = &src[0]; とすると,pには配列の先頭のアドレスが入ります.
では,P+1には何が入るでしょう?
ここで,キーボードから文字を入力する命令 scanf を思い出してみよう.
int a;
scanf("%d", &a);
この,&aは実はポインタを意味していて,aのアドレスに値を入力していたのです.
1.変数a,bに数字をキーボードから入力し,a+bを求めて表示するプログラムをポインタ変数を使って書き換えよ.
元になるプログラム:
#include <stdio.h>
void main()
{
int a,b;
scanf("%d", &a);
scanf("%d", &b);
printf("答え:%d\n", a+b);
}
書き換えるプログラム:
#include <stdio.h>
void main()
{
int a,b;
int *pa,*pb;
pa = &a;
pb = &b;
scanf("%d",?????);
scanf("%d",?????);
printf("答え:%d\n",?????????);
}