篇幅长从 https://www.cnblogs.com/buchizaodian/p/11511256.html 提取出来
1.寻址运算符 *
#include<iostream> using namespace std; void main() { int a = 3; int b = 4; cout << &a<<endl; cout << &b << endl; cout << sizeof(a) << endl; }
打印
012FFA34 012FFA28 4
为什么地址+4个字节后不是连续的?
根据系统,有可能是不连续的。
为什么b的地址要比a的地址小?
栈的声明地址从高到低。
根据系统也是有可能不同...
2.指针
定义指针只要在类型和变量中间即可,中间的空格会被忽略
int*p = &a; int* p = &a; int *p = &a; int * p = &a;
--
#include<iostream> using namespace std; void main() { int a = 6; int *p = &a; cout << &a << endl;//a的地址 cout << p << endl;//指针p中存放的值,这个值是个地址 cout << *p << endl;//p地址指向的值 cout << &p << endl;//p本身也有个地址,不过目前没有人引用它 }
3.指针的危险性
C++创建指针时计算机将分配用来存储地址内存,但不会分配指针所指数据的内存。
4.地址和数字的区别
地址和整数是两个不同的类型(虽然看上去一样)
int *p = 0x00ED1821;//错误 int *p = (int *)0x00ED1821;//正确方式,转成地址
这里的 0x00ED1821 是一个十六进制数值,而不是一个地址。
5.使用new分配内存
(1)编译时分配内存
int a = 6; int* p = &a;
像这种方式,是编译时分配的内存
(3)运行时分配内存
指针的最大作用是程序运行阶段分配未命名的内存存储数据
int* p = new int;
这种方式下只能通过指针来访问内存,new int 会根据类型所占用的空间找到一个长度合适的内存块,并返回地址
原文:https://www.cnblogs.com/buchizaodian/p/11516266.html