C++進級(二)関数、ポインタ、構造体
18008 ワード
文書ディレクトリ関数 関数の宣言 関数のファイル作成 ポインタ const修飾ポインタ ポインタと配列 ポインタと関数 構造体 定義 構造体配列 構造体ポインタ 構造体ネスト構造体 構造体作関数パラメータ 構造体におけるconstは を用いる.
関数#カンスウ#
関数が戻り値を必要としない場合は、宣言時に
関数の宣言
関数宣言は、コンパイラの関数名と関数の呼び出し方法を示すものです.関数の実際のボディは、個別に定義できます.これにより、関数は
関数のファイル作成
関数のファイル作成には、一般的に4つのステップがあります.は、 は、 ヘッダファイルに関数の宣言を書きます. ソースファイルに関数の定義を書きます.
ししん
ポインタは、別の変数のアドレス、すなわちメモリ位置の直接アドレスである変数です.他の変数と同様に、使用する前に宣言する必要があります.
ある変数のメモリアドレスを空のポインタ:ポインタ変数は、メモリ内の 野ポインタ:ポインタ変数は不正なメモリ領域を指します.たとえば
const修飾ポインタ
const修飾ポインタ–定数ポインタ:ポインタの指向は変更できますが、ポインタの指向の値は変更できません. const修飾定数--ポインタ定数:ポインタ指向は変更できません.ポインタ指向の値は変更できます. constはポインタを修飾し、定数を修飾します.ポインタの指向とポインタの指向の値は変更できません.
ポインタと配列
ポインタを使用して配列内の要素にアクセスします.
ポインタと関数
関数パラメータとしてポインタを使用して、実パラメータの値を変更できます.
こうぞうたい
定義#テイギ#
構造体は、ユーザーがカスタマイズしたデータ型に属し、ユーザーが異なるデータ型を格納できるようにします.構文:
構造体を介して変数を作成する方法は、3つあります.
こうぞうたいはいれつ
カスタマイズされた構造体を配列に入れてメンテナンスを容易にします.
構文:
構造体ポインタ
オペレータ
構造体のメンバーには、
構造体ネスト構造体
エンベロープ構造体ネスト構造体は、構造体のメンバーが別の構造体であることを意味する.
構造体を関数パラメータとする
は構造体をパラメータとして関数に伝達する.伝達の方式は2種類あります:1.値の転送2.アドレス転送.
同様に、ここでアドレス伝達は実パラメータ値を変更する.
構造体でのconst使用
ジルコニウム構造体では
関数#カンスウ#
c++
における関数定義には、一般的に5つのステップがある:1.戻り値のタイプ;2.関数名;3.パラメータ表列4.関数体文5.return式. ( )
{
return
}
関数が戻り値を必要としない場合は、宣言時に
void
と書けばよい.関数の宣言
関数宣言は、コンパイラの関数名と関数の呼び出し方法を示すものです.関数の実際のボディは、個別に定義できます.これにより、関数は
main
関数の後に書くことができます.// ,
//
int max(int a, int b);
int max(int a, int b);
//
int max(int a, int b)
{
return a > b ? a : b
}
関数のファイル作成
関数のファイル作成には、一般的に4つのステップがあります.
.h
という接尾辞を持つヘッダファイルを作成する..cpp
という接尾辞のソースファイルを作成します.//swap.h
#include
using namespace std;
void swap(int a, int b);
//swap.cpp
#include "swap.h"
void swap(int a, int b)
{
}
ししん
ポインタは、別の変数のアドレス、すなわちメモリ位置の直接アドレスである変数です.他の変数と同様に、使用する前に宣言する必要があります.
type *var-name;
ある変数のメモリアドレスを
var-name
に割り当てる必要がある場合、変数名に&
を付けると、p=&a;
のような変数のアドレスが取得されます.ポインタの前に*
を付けると、解参照を表し、ポインタが指すメモリのデータが見つかります.0
と番号付けされた領域を指します.例:int * p = NULL
.一般にポインタを初期化するために使用され、空のポインタが指すメモリはアクセスできません.int *p = (int *)0x1100
ですが、事前にこのようなメモリスペースを申請していないと、エラーが発生します.const修飾ポインタ
const
修飾ポインタには3つのケースがあります.int a =10;
int b =10;
int * p = &a
const int * p =10;
//*p = 20; // , 。
p = &b; // , 。
int* const p =10;
*p = 20; // , 。
//p = &b; // , 。
const int* const p = 10;
*p = 20; // , 。
p = &b; // , 。
ポインタと配列
ポインタを使用して配列内の要素にアクセスします.
int arr[] = {1,2,3};
int * p = arr; // , *p , p++ 。
ポインタと関数
関数パラメータとしてポインタを使用して、実パラメータの値を変更できます.
//
void swap1(int a ,int b)
{
int temp = a;
a=b;
b=temp;
}
// ,
vo1d swap2(int * p1,int *p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
こうぞうたい
定義#テイギ#
構造体は、ユーザーがカスタマイズしたデータ型に属し、ユーザーが異なるデータ型を格納できるようにします.
struct { };
struct student{
string name;
int age;
int score;
}
構造体を介して変数を作成する方法は、3つあります.
struct
struct student s1; // c++ struct
s1.name = " ";
s1.age = 18;
s1.score = 100;
struct ={ 1 , 2 ...}
struct student s2 ={" ", 19,100}
struct student{
string name;
int age;
int score;
}s3;
s3.name=" ";
s3.age=20;
s3.score=60;
こうぞうたいはいれつ
カスタマイズされた構造体を配列に入れてメンテナンスを容易にします.
構文:
struct [ ] = {{}, {}, ... {}}
struct student arr[2]={{" ", 18, 80},{" ",19,60}}
arr[1].name=" ";//
構造体ポインタ
オペレータ
->
は、構造体ポインタを介して構造体属性にアクセスすることができる.struct student s ={" ", 19,100}
struct student *p = &s; //
p->name; //
構造体のメンバーには、
->
オペレータを使用してアクセスできます.構造体ネスト構造体
エンベロープ構造体ネスト構造体は、構造体のメンバーが別の構造体であることを意味する.
struct teacher{
int id; //
string name; //
int age; //
struct student stu; //
};
teacher t;
t.stu.name = " " //
構造体を関数パラメータとする
は構造体をパラメータとして関数に伝達する.伝達の方式は2種類あります:1.値の転送2.アドレス転送.
struct student s;
void printstudent(struct student s){....} //
printstudent(s);
void printstudent2(struct student *p){p->name;....} //
printstudent(&s);
同様に、ここでアドレス伝達は実パラメータ値を変更する.
構造体でのconst使用
ジルコニウム構造体では
const
tを用いて誤動作を防止することができる.たとえば、構造体の値が関数に渡されると、構造体が関数に渡されるようにコピーされますが、呼び出し回数が多くなるとメモリ領域が大きくなり、struct student s ={" ", 19,100}
void printstudent2(const struct student *p){p->name;....} //const
printstudent(&s);