标签:指针 创建 十六 图片 alt 单位 第一个 img 地址
在介绍指针概念之前,需要了解在计算机程序存储数据时必须跟踪的三基本属性:
1,地址运算符&
在常规变量定义时,寻找变量的 值 和 类型 很方便,如果想知道存储变量的 地址(也就是内存区),这时就需要用到地址运算符 &
int main()
{
int a = 3;
int b = 4;
cout << "变量 a 的地址为 " << (&a) << endl;
cout << "变量 b 的地址为 " << (&b) << endl;
return 0;
}
这里定义了两个 整形变量a、b,;后面加上 & 地址运算符,在调试台打分别印出变量 a,b 变量的存储地址;
由上面结果可知,显示地址时用的是十六进制表示法,变量 a 和 b 之间相差 4 (即四个字节),是由于 a,b 同为 int 类型;
2,指针的定义和用法
指针是一种特殊类型的变量,用于存储值的地址,指针名即为地址, *****运算符被称为间接值或接触引用运算符,该运算符应用于指针上,就得到该地址处存储的值;
在下面例子中,我用 int* 声明了一个指针变量 p 和一个 int 变量 b(复制为 4) ;并将 p 指向了 b
变量地址可用两种方式表示,p 和 &b;
变量值也同样由两种方式表示,*p 和 b;
int main()
{
int* p;//定义一个指针p 类型为 int;
int b = 4;
p = &b;//将 p 指向 b;
cout << "变量 b 的地址为 " << p << endl;
cout << "变量 b 的地址为 " << (&b) << endl;
cout << "变量 b 的值为" << b << endl;
cout << "变量 b 的值为" << *p << endl; // *p 表示指针p中存储的值;
return 0;
}
结果如下:
声明指针方式如下,这里的 typename 可替换为 int、char、double,表示指针指向的类型
typename* p;// typename 表示类型,p表示变量;
也可以在声明的同时进行初始化,需要注意的是,被初始化的是指针,而不是指针指向的值;
int a =4;
int *pt =&a;
使用指针时与使用常规变量有一个很大的不同点:使用常规变量时 ,值是指定的量,而地址是派生量。而在指针策略中,地址是指定量,而值为派生量;
指针的错误用法
在 C++ 创建指针时,计算机将会分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存 ,为数据分配空间是一个独立的空间,不可省略,如下
int *pt;//定义一个指向 int 类型的指针 pt;
*pt = 23;// 错误,指针 pt 未指向任何地址,
在上面例子中,想把指针 pt 指向的值赋值为 23 ,但是这里的 pt 没有初始化,没有指向任何值,也就是说我们不知道 pt 指向哪里;如果直接把 23 赋给 *pt ,可能会造成一些最隐秘,难以跟踪的 bug;
所以需要谨记一点,在对指针应用解除引用运算符(*) 之前,将指针初始化为一个确定的,适当的地址
3,指针和数组
在 C 和 C++ 中,指针和数组基本等价,原因是在于指针算术和C++ 内部处理数组的方式;
指针与数组的关系
int *p = arr
(类型是一致的) ,则代表指针 p 指向该数组第一个元素所在的地址 arr[0] p = arr[0]
*(p+1) == arr[n+1]
,例子如下,指针 p,q 初始化时分别指向 数组 arr[0] 和 arr;当 p,q 同时加 1 时,它们指向的值也未发生改变;
int main()
{
int* p;//定义一个指针p 类型为 int;
int *q;
int b[2] = {3,4};
p = &b[0];//将 p 指向 b;
q = b;// 指针 q 指向数组 b 的第一个元素
cout << "变量 p 的地址为 " << p << endl;
cout << "指针变量 p 指向的值为 " << *p << endl;
cout << endl;
cout << "指针变量 q 指向的值为 " << *q << endl;
cout << endl;
cout << endl;
cout << "变量 p+1 的地址为" << p+1 << endl;
cout << "指针变量 p+1 指向的值为" << *(p+1) << endl; // *p 表示指针p中存储的值;
cout << endl;
cout << "指针变量 q+1 指向的值为" << *(q + 1) << endl; // *p 表示指针p中存储的值;
return 0;
}
当 array 表示数组时,sizeof(array)可以测试出 array 数组大小,单位 字节;
array 为数组时,array + n 表示的是一个指向数组索引为 n-1 的指针,用 sizeof(array +n)指向指针类型大小;
int main()
{
int* p;//定义一个指针p 类型为 int;
int *q;
int b[4] = {3,4,5,6};
p = &b[0];//将 p 指向 b;
q = b;// 指针 q 指向数组 b 的第一个元素
cout << "数组 b 的大小为 " << sizeof(b) << endl;
cout << "指针 b[1] 的大小 " << sizeof(b+1) << endl;
cout << "指针 p+1 的大小 " << sizeof(p+1) << endl;
return 0;
}
运行结果如下
标签:指针 创建 十六 图片 alt 单位 第一个 img 地址
原文地址:https://www.cnblogs.com/zeroing0/p/14351675.html