指针的基本应用
#include <iostream>using namespace std;int sum(int* num1,int num2){*num1 = 20;//*是取值符,可以直接影响内存地址保存的值num2 = 30;return *num1 + num2;}int main(){int num1 = 1;int num2 = 2;int* pNum1 = &num1;//获取num的地址,并将pNum指针指向该地址,pNum1 == &mum1,cout << sum(pNum1, num2) << endl;cout << num1 << endl;//num1传参时用的是指针,修改的指定内存地址的内容,故而会对实参影响cout << num2 << endl;//num2传参时传的是值,不会影响实参,故而不变return 0;}
50 20 2
空指针及野指针
#include <iostream>using namespace std;int main(){int* p1 = (int*)0x1100;//野指针,指向其实我们并未申请内存的地方,如果访问会导致程序崩溃int *p2 = NULL;//空指针return 0;}
指针访问数组
#include <iostream>using namespace std;int main(){int arr[] = {1,2,3,4,5};int size = sizeof(arr)/sizeof(arr[0]);//一般访问数组的方式for (int i = 0; i < size; i++){cout << arr[i] << endl;}//采用指针访问数组的方式int *p = arr;//指针会指向数组的第一个元素的地址for (int i = 0; i < size; i++){cout << *p << endl;p++;//指针向后移,但一般不建议去移动指针,而是像数组一样利用索引访问,如下例}int* pArr = arr;for (int i = 0; i < 5; i++){cout << pArr[i] << endl;}return 0;}
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
如何把内存地址转为int类型
参考资料:https://ask.csdn.net/questions/7539281
因:64位下地址值是8字节,转为int会溢出,使用long long int承载即可
可能会编译失败的情况
#include <iostream>using namespace std;int main(){int a = 10;cout << (int)&a << endl;}
可以修改为:
#include <iostream>using namespace std;int main(){int a = 10;cout << (long long int)&a << endl;}
