//指针
//程序是在硬盘上以文件的形式存在的
//但它们的运行却是在计算机的内存中发生的
//在C++里,变量类型是根据
//他们的自然边界进行对齐的
//对齐问题会因为系统平台的不同而不同
//64位系统对应8字节
//32位系统对应4字节
//变量的索引
// 1 通过变量名
// 2 通过地址
//取地址操作符 & :获取变量的地址
//1 对齐在计算机底层世界处处皆是
//内存对齐,文件对齐
//(程序在编译链接后会被分割成一个一个的区块0
//而区块在文件和内存中要按照一定的规律来对齐)
//一般32位系统内存对齐值是:1000H==4KB
//一般64位系统内存对齐值是:2000H==8KB
//文件的对齐值:200H
//2 变量的地址在程序执行期间是不会发生变化的
//这是各个系统的一个普遍要求
// 同一个程序不同时间加载到内存中
// 同一个变量的地址会发生改变
//--------------------------------------------------------------
// 地址:计算机内存中的某个位置
// 指针:专门用来存放地址的特殊类型变量
//指针变量声明:
// int *p;
// int pp=123;
// p=&pp;
// int *p1,p2,p3;
// 形式说明的指针变量只有一个:p1
// p2 p3 都是整型变量
// 建议每行只声明一个
// 指针变量前面的类型是用来说明指针指向的
// 数据类型,请务必匹配来使用
// 允许 void类型的指针变量:void *p;
// 创建变量时,系统将分配一些内存块来用来保存它们的值
// 每个内存块拥有独一无二的地址
// 变量的地址可以用 &variablename 语法来取得
// & “取地址”操作符
// 可以把地址赋值给一种称为指针的特殊变量
// 指针的类型必须与由它保存其地址的变量的类型一致
/*
int a=456;
char b='C';
int *aPointer=&a;
char *bPointer=&b;
*/
/*
这会让程序保留4个内存块。
两个为变量保留,两个为指针保留
变量a和变量b里面存放的是变量的值
两个指针变量存放着指针的值
这些值是其他变量的地址(首地址)
*/
/*
利用指针访问位于该地址的数据
需要对指针进行“解引用”处理
即在指针名前面加一个星号 *
int a=456;
int *aPointer=&a;
*aPointer = a = 456
如果 *aPointer=123
那么 a=123
*/
#include <iostream>
using namespace std;
int main()
{
int a=123;
int *aPointer=&a;
cout << "a的值是:"<<a<<"\n";
cout << "*aPointer的值是:"<<*aPointer<<"\n";
cout << "修改后\n";
*aPointer=456;
cout << "a的值是:"<<a<<"\n";
cout << "*aPointer的值是:"<<*aPointer<<"\n";
}
/*
指针所保存的是内存中一个地址
它并不保存指向的数据的值本省
因此,务必确保指针对应一个已经存在
的变量或者已经分配了的内存
*号的用途
创建指针
int *myPointer = &myInt;
对指针解引用
*myPointer = 3998;
C++ 允许指针群P 多个指针有同样的值
int *p1=&myInt;
int *p2=&myInt;
C++支持无类型(void)指针
就是没有被声明为某种特定类型的指针
void *vPointer;
注:对一个 无类型指针进行解引用前
必须把它转换为一种适当的数据类型
*/
C++ 指针
最新推荐文章于 2024-11-02 14:41:43 发布