paiza times

paizaがお届けする、テック・キャリア・マネジメント領域における「今必要な情報」を届けるWebメディア

logo

paizaがお届けする、テック・キャリア・マネジメント領域の「今必要な情報」を届けるWebメディア

初心者がつまずきやすいC言語のポインタを理解できる講座が新登場


f:id:paiza:20140916135428p:plainこんにちは。谷口です。

動画でプログラミングが学べるpaizaラーニングC言語入門編に「C言語入門編5: ポインタについて理解しよう」が追加されました。

C言語を学び始めた人ばかりの人が、とにかくつまずきやすいのがポインタの使い方です。

今回は、ポインタと「C言語入門編5: ポインタについて理解しよう」の内容についてご紹介します。

C言語入門編について、詳しくはこちら

C言語入門編5: ポインタについて理解しよう」について

ポインタとは、データそのものではなく、「データがある場所(アドレス)を指し示すもの」です。

アドレスはメモリ上の番地のようなものです。コンピュータの中のメモリは、こんな感じに区分けされていて、それぞれの場所に値が割り振られています。この値がアドレスです。



以下のプログラムを実行するとき、メモリがどのような状態になるか見てみましょう。

#include <stdio.h>

int main(void)
{
    int x;
    int y;
    char z[] = "hello";
}


プログラムの中で使われている変数は、メモリ上に格納されます。ここでは x、y、z の 3 つの変数が宣言されているので、それぞれの変数にメモリの領域が割り当てられます。

割り当てられたメモリ領域の大きさは、変数の型によって異なります。ここでは、z変数は文字列になっているので、x変数やy変数よりも大きなメモリ領域が割り当てられています。

このポインタを使うと

  • アドレスの値を表示させる
  • ポインタが指し示す変数の値を参照したり、書き換えたりする

といったことができます。

ポインタを使ってみる

ポインタ型の変数を宣言してみます。

さきほどint型やchar型の変数を使いましたが、それぞれの型には対応するポインタ型があって、「int へのポインタ型」「char へのポインタ型」があります。

まずは「int へのポインタ型」の変数を宣言してみます。

#include <stdio.h>

int main(void)
{
    int x = 10;
    int y = 20;
    int *p1;

    printf("%d\n", x);
    printf("%d\n", y);
}

これで「intへのポインタ型」のp1変数を用意できました。intに続けて変数名の前に*(アスタリスク)をつけるとintへのポインタ型の変数を宣言できます。

なお、アスタリスクはintの後ろにつけても変数の前につけても同じ効果があります。

int* p1;

ポインタに代入する

次に、作成したポインタにx変数のアドレスを代入してみます。

#include <stdio.h>

int main(void)
{
    int x = 10;
    int y = 20;

    int *p1;
    p1 = &x;

    printf("%d\n", x);
    printf("%d\n", y);
}

このように、変数名の前に&をつけると、この値が格納されている場所のアドレスになります。アドレスの代入も、ふつうの代入と同じようにイコールを使えばできます。

ポインタの先の値を書き換える

次に、変数の値を書き換えてみます。

#include <stdio.h>

int main(void)
{
    int x = 10;
    int y = 20;

    int *p1;
    p1 = &x;

    *p1 = 30;

    printf("%d\n", x);
    printf("%d\n", y);
 }

ポインタの前にアスタリスクをつけると、そのポインタの指し示す先の値を参照したり、書き換えたりすることができます。そのため、 *p1 = 30; でx変数の値を30に書き換えています。

ポインタを追加する

同じようにy変数の値も書き換えてみます。

 #include <stdio.h>

int main(void)
{
    int x = 10;
    int y = 20;

    int *p1, *p2;
    p1 = &x;

    *p1 = 30;

    printf("%d\n", x);
    printf("%d\n", y);
}

p2変数にy変数のアドレスを代入して、値を書き換えます。

#include <stdio.h>

int main(void)
{
    int x = 10;
    int y = 20;

    int *p1, *p2;
    p1 = &x;
    p2 = &y;

    *p1 = 30;
    *p2 = 40;

    printf("%d\n", x);
    printf("%d\n", y);
}

このように、ポインタを使えば変数を直接操作しなくても値を書き換えることができます。

まとめ

C言語入門編5: ポインタについて理解しよう」では、このあと配列に対するポインタの使い方や、ポインタの配列、mallocに関するレッスンが続きます。

C言語入門編5: ポインタについて理解しようについて、詳しくはこちら


また、C言語入門編では、変数の使い方や四則演算、条件分岐やループ、配列などについても解説しています。

C言語入門編について、詳しくはこちら

C言語入門編1:プログラミングを学ぶ
C言語入門編2: 条件によって処理を変えてみよう
C言語入門編3: ループ処理を学ぶ
C言語入門編4: 配列の基礎
C言語入門編5: ポインタについて理解しよう

「C言語を使ってプログラミング問題を解いてみたい」「自分のスキルを試してみたい」という方は、スキルチェック問題に挑戦してみてください。

スキルチェック問題について、詳しくはこちら
paizaのスキルチェック





paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

詳しくはこちら

paizaラーニング

そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

詳しくはこちら

paizaのスキルチェック

paizaのおすすめコンテンツ

PPG proken プログラミングゲーム「初恋 プログラミング研究会〜海に行こうよ〜」 PPG Bingo プログラミングゲーム「コードレビューBINGO!!」
paiza転職 paiza新卒 EN:TRY paizaラーニング 記事内に記載している情報は、記事公開時点でのものとなります。 Copyright Paiza, Inc, All rights reserved.