06_指针基础

指针(地址编号)

一 概念

为了方便访问内存中的内容,给每一个内存单元编号,我们称这个编号为地址,也就是指针。

指针是一种数据类型 所以 指针有自己的内存 存储的是编号(地址)

* 要素

1 指针本身的类型 指向的按类型*
2 指针指向的类型 可以是所有类型 包括是指针类型、数组类型、函数类型……
但是具体某种类型指针 只能指向具体的类型
3 指针本身的内存 用来存指向的内容的地址(指针里面只有编号)(四个字节)
4 指针指向的内存 可以是各种类型 内存大小不限定

二 定义

    // 类型 变量名;
int num = 10;
// 类型 变量名;
// 指针类型 指针名;
// 指向的类型* 指针名;
// *:指针定义 在定义时 表示定义的是一个指针
// *:取内容符 在别的地方 表示取后面的这个指针的内容
// &:取地址符 表示取地址
int* pnum = #
*pnum = 2; // 等价于 num = 2;
cout << num << endl;

三 内存

因为指针只存编号(地址),所以,所有指针本身的内存:四个字节。

四 赋值

1 用对应类型的地址

int num = 0;
int* pnum;
pnum = &num;

2 用相同类型的指针

int num = 0;
int* p1 = &num;
int* p2 = p1;

3 直接用地址

int* pi = (int*) 0X36;

4 用数组名

数组名就是数组的首地址
int arr[5] = {1,2,3,4,5};
int* parr = arr;

5 字符串(char*)

cout<< char*类型指针<<endl;
此时会打印字符串
char* pch = "gkul";

int arr[5] = { 1, 2, 3, 4, 5 };
cout << arr << endl;
char str[5] = { '1', 's', '4', 'b', '\0' };
cout << str << endl;
char* pch = "ghjk";
cout << pch << endl;
// 字符数组首地址 是char*类型
// char*类型可以直接cout整个字符串 直到'\0'为止

6 置空

有时候,指针定义后或使用后,没有了指向,但是指针还在。

由于指针可以直接操作内存,不安全。

所以在内存开始时(地址编号为0)的地址,作为一个特殊地址。

将指针指向这里是安全的。

int* p1 = NULL;
int* p2 = nullptr;
int* p3 = (int*)0X0;

7 多级指针

    int num = 10;
cout << num << endl; // num的值
cout << &num << endl; // num的地址
int* pnum = &num;
cout << pnum << endl; // num的地址
cout << *pnum << endl; // num的值
cout << &pnum << endl; // pnum的地址
int ** pp = &pnum;
cout << pp << endl; // pnum的地址
cout << *pp << endl; // num的地址
cout << **pp << endl; // num的值
cout << &pp << endl; // pp的地址
int *** ppp = &pp;
cout << ppp << endl; // pp的地址
cout << *ppp << endl; // pnum的地址
cout << **ppp << endl; // num的地址
cout << ***ppp << endl; // num的值


short sh = 10;
short* psh1 = &sh;
short* psh2 = psh1;
short** ppsh1 = &psh2;
short** ppsh2 = ppsh1;
short*** pppsh = &ppsh2;
***pppsh = 9;
cout << "sh = " << sh << endl;

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-08-11 13:48  Zhen_X  阅读(238)  评论(0编辑  收藏  举报