指针的基本应用
#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;
}