指针(地址编号)一 概念为了方便访问内存中的内容,给每一个内存单元编号,我们称这个编号为地址,也就是指针。指针是一种数据类型 所以 指针有自己的内存 存储的是编号(地址)* 要素1 指针本身的类型指向的按类型*2 指针指向的类型可以是所有类型 包括是指针类型、数组类型、函数类型……但是具体某种类型指针 只能指向具体的类型3 指针本身的内存用来存指向的内容的地址(指针里面只有编号)(四个字节)4 指针指向的内存可以是各种类型 内存大小不限定二 定义// 类型 变量名; int num = 10; // 类型 变量名; // 指针类型 指针名; // 指向的类型* 指针名; // *:指针定义 在定义时 表示定义的是一个指针 // *:取内容符 在别的地方 表示取后面的这个指针的内容 // &:取地址符 表示取地址 int* pnum = # *pnum = 2;// 等价于 num = 2; cout << num << endl; 三 内存因为指针只存编号(地址),所以,所有指针本身的内存:四个字节。四 赋值1 用对应类型的地址int num = 0; int* pnum; pnum = # 2 用相同类型的指针int num = 0; int* p1 = # 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 = # 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;来源:https://www./content-4-746401.html |
|