C ++フェーズIIの基礎を理解するために取得する(8) - C ++のポインタ

1.ポインタとは何ですか?

         ポインタが何であるかをより明確に理解するために?私たちは、変数とメモリの間の関係を初めて目、我々は= 10以下の整数aを定義します。4バイトのサイズ、およびストア10のメモリブロック内のスペースを見つけるに対応するが、このスペースを動作させるために、可変の採用に、実際の操作は、この番号に対応するメモリアドレスであるが、この16私たちが知らないメモリビットの16進数は、その変数の操作を使用しています。我々は、このメモリ空間の数を扱うことができれば、我々はこのスペースを操作できることを知っています。どのようにして、このメモリアドレスの数、それを知っていますか?ここでは、ポインタの概念を導入することが必要です。我々は、ポインタがアドレスであるように、他の言葉でポインタメモリアドレスの数は、理解することができる保存しました。

ポインタを使用する方法2

まず、データ型の形式*ポインタ名へのポインタを定義します。

int *p;

レコードは= 10 int型、変数のアドレス&文字を記録したアドレスを使用して、のような、変数のアドレスを、

int main() {
	int a = 1;
	int *b;
	b = &a;//使用取址符将地址给指针
	cout << &a;//输出变量a的地址编号001AFd84
	cout << b;//输出指针b的值是001AFd84,所以指针就是一个地址
}

私たちは、ポインタの値を知る上で、このメモリアドレス番号に対応し、そのデータ内でこのメモリは?ソリューションは、参照により、ポインタpの前に*対応するデータメモリの一部を追加するために取られていますか、上記の例では、そう

int main() {
	int a = 1;
	int *b;
	b = &a;
	cout << &a;
	cout << b;
	cout << *b;//解引用,得到指针(地址)对应的数据,1
}

もちろん、上記INT * B; B =&; 2つのコードは、以下で置き換えられてもよいです

int main() {
	int a = 1;
	int *b = &a;
	cout << a;//变量a的值为1
	cout << &a;//变量a的地址为002AlF48
	cout << b;//指针值为002AlF48
	cout << *b;//指针对应的数据为1
}

注意:

32ビットオペレーティングシステムでは、ポインタ4バイトに関わらず、ポインタの種類の、64ビット、8バイト。

3.ヌルポインタ

私たちは、主にポインタ変数を初期化するために使用され、メモリ・アドレス・ポインタ番号0はヌルポインタと呼ばれているを指します。NULLポインタと0-255スペースがシステムによって使用されているので、アクセスを許可していません。

int main() {
	int *b = NULL;
	*b = 100;//程序报错。不能访问空指针
}

修飾されたポインタ4.const

int main() {
	int a = 10;
	int b = 20;
	//const定义一个常量指针,此时指针可以修改,但是指针的值不可修改
	const int *c = &a;
	//*c = 20;//指针的值不可修改,错误
	c = &b;//指针可以修改,正确
	//const定义一个指针常量,此时指针的值可以修改,但是指针不可修改
	int* const d = &a;
	//d = &b;//错误
	*d = 20;//正确
	//const修改常量又修饰指针,此时指针的值和指针都不可修改
	const int* const e = &a;
}

要約:CONSTは最初の一定のポインタであり、ポインタが以前の定数へのポインタであり、CONSTは*が続く名前を示すポインタとのconstポインタを変更することができない、値を変更することができない表します

ポインタと配列

int main() {
	int a[3] = {1,2,3};
	int *p = a;//注意数组和变量不一样,不是&a,因为数组名就是数组的首地址
	cout << *p;//1
	//如何访问第二个元素,只需将这个整型的地址向后移4个字节,即p++
	for (int i = 0; i < 3; i++) {
		cout << *p;//1
		p++;
	}
}

 

6.ポインタと機能

以前の私たちは、次の例を議論しました

#include <iostream>
using namespace std;
void swap(int m1,int m2);
int main() {
	int a = 1;
	int b = 2;
	swap(a, b);
	cout << a;//1
	cout << b;//2
}
//交换
void swap(int a, int b) {
	int temp = b;
	b = a;
	a = temp;
	cout << a;//2
	cout << b;//1
}

この転送のために実際のパラメータ値、アドレスルックパスには影響を与えません。

#include <iostream>
using namespace std;
void swap(int *m1,int *m2);
int main() {
	int a = 1;
	int b = 2;
	swap(&a, &b);
	cout << a;//2
	cout << b;//1
}
//交换
void swap(int *a, int *b) {
	int temp = *b;
	*b = *a;
	*a = temp;
	cout << *a;//2
	cout << *b;//1
}

概要:あなたが渡された使用の引数にアドレスを変更したい場合は、引数は、値によって渡され、変更したくない、統合ケースのバブルソート

 

                        一つの公益号のjavaをスキャンしています。さらに重要なのは、少し猿は、あなたが道をプログラムする友人もしていく所存です!

記事開始アドレス:www.javayihao.top

いいえ公共のデビューん:javaの一つ

 

おすすめ

転載: www.cnblogs.com/javayihao/p/11910850.html