2021-06-06 · 6분
正規表現チートシート
正規表現のリファレンス:正規表現とは何か、メタ文字(^x、x$、x+、x?、x*、グループ、量指定子)、文字クラス/エスケープシーケンス([xy]、\b、\d、\s、\w)、そして g/i/m フラグ。
2021-06-04 · 2분
この記事は公開から2年以上経過しています。
C、C++ ポインタ
特定のメモリの位置を指すようにした変数をポインタ(pointer)といいます。つまりアドレスを知ってこそ使えます。
私たちは今まで変数を宣言すると、その変数がメモリに記録されるとは考えず、その宣言した名前と値だけを考えて使ってきました。しかし実際に int a; と宣言するとき、'メモリ x132453647(任意)に int 型、変数名 a、初期化されていない状態で使う' というのと同じです。このとき a = 10; と入力すると、'メモリ x132453647 にある値を 10 に変える' というのと同じです。
なので私たちがポインタを使うということは、'名前が a' の変数を探すのではなく、'メモリ x132453647(任意)' を探せということです。アドレスが分かれば当然、値も分かるはずです。
ポインタもまた、既存の変数を宣言していたのと非常に似た見た目です。データ型も int、float、double、long、char などが存在します。変数と同じように宣言し、途中に * だけ入れればよいです。
例えば
//int 型ポインタ
int *a;
//float 型ポインタ
float *a;
//double 型ポインタ
double *a;
上のように宣言できる。
ポインタの宣言と初期化 — どうすれば宣言とともに初期化ができるでしょうか?私たちが "scanf" を学ぶとき "&" という記号を使った記憶はありますか?まさにこの "&" 記号がアドレスを教える記号です。
例えば
#include <stdio.h>
int main() {
int num1 = 5;
int num2 = 10;
int *num1Ptr = &num1;
int *num2Ptr = &num2;
printf("%d %d\n", num1, *num1Ptr);
printf("%d %d\n", num1, num1Ptr);
}
/*
出力:5 5
10 10
*/
上のようにできる。少し説明すると、int 型変数 num1、num2 を宣言後、int 型ポインタ num1Ptr、num2Ptr も宣言し、
int* num1Pointer = &num1;
int * num1Pointer = &num2;
を入力すると、それぞれ num1 と num2 のアドレスを受け取るのが確認できます。その結果、num1 値と *num1Ptr の値が同一に出力されるのが確認できます。
int 型ポインタ int* p を宣言したとき、p = &num1、つまり int 型ポインタである変数 p の値に num1 変数の値を代入したとき、
printf("%d", *p) のように p に * を付けて使うと、p が指すアドレスにある値を表し、
printf("%d", p) のように p だけ使うと、p が指しているアドレスを表します。
原文(韓国語): tistory — 2021-06-04 公開、当ブログへ移行。この翻訳は AI の協力で作成されました。
…