栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

指针的说明

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

指针的说明

指针的说明
什么是指针, 这就要从内存说起, 内存是机算机在运行的时候存储数据的地方. 而CPU访问内存的方式, 就是访问地址, 所谓的地址, 是在操作系统初始化时就做好的事情, 每个内存块, 都有一个唯一的序号和它对应, 这个序号, 在机算机这里叫做内存地址.

通常情况下.CPU在访问某个C程序里面的变量时, 首先需要知道这个变量的地址, 然后通过取值指令把这个地址的数据放到CPU内部, 这时候才能对这个值进行下一步操作, 操作完成后如果这个变量的值发生了变化, 就又把这个值放回到变量地址处, 如果变量没有发生变化, 这个地址就有可能被扔掉, 在CPU内腾出地方存别的变量的地址.
而指针, 随着计算机CPU位数的不同(32位CPU, 64位CPU), 它的大小也不同, 一般情况下, 会用long来存储指针值, 而在C或是C++里面,则使用不同的方式, 但是他们的本质上是相同的.
比如:

int *c = new int;
*c = 10;
delete c;

这段代码中, 定义了一个int*这样的指针, 使用sizeof操作符输出它的大小.

printf( "%d   %d %dn", sizeof( c ), sizeof( int* ) , sizeof( long ) );

这时候会发现输出的值是相同的. 这也证明了指针大小是和CPU相关的.

指针就是地址, 只要知道某个变量的地址, 那么就可以对它做任何操作, 或是使用其它类型篡改它的值, 比如下面代码:

float *f = new float;
*f = 10.0f;
int *lpi = (int*)f;
*lpi = 20;
printf("%fn", *f);
delete f;

会发现输出的是个奇怪的值.
如何表示在C中使用指针表示数组, 首先需要明确什么是数组, 一般数组的定义如下:

int intArray[10];

这段代码中定义了一个长为10的整型数组, 还是回到内存上来说, 这其实是从某个内存地址处给出了连续10个int的内存块, 而intArray这个名字单独使用时, 就是一个指针,等同于int*这样的变量. 我们在访问数组中某个变量时, 使用下面代码:

int c = intArray[5];
printf("%dn", c);

此时输出的还是随机数值, 为了初始化这10个整型数据, 使用下面代码:

for ( int i = 0; i < 10; i ++ )
{
    intArray[i] = i;
}
int c = intArray[5];
printf("%dn", c );

上面也说了, intArray等同于指针, 那么, 就会有下面的代码:

int *pointer = intArray;
printf("%dn", pointer[6] );

当然也可以直接定位到第六个数组处, 此时, 使用下面代码都可完成此操作

int *pointer2 = pointer + 6;
int *pointer3 = &intArray[6];
printf("%d, %dn", *pointer2, *pointer3);

同样, 下面代码也会是可以正常工作的代码

int *arrayPointer = new int[20];
for ( int i = 0; i < 20; i ++ )
{
    arrayPointer[i] = i;
}
for ( int i = 0; i < 20; i ++ )
{
    printf("%d ", arrayPointer[i] );
}
printf("n");
delete []arrayPointer;

C和C++中, 万物皆可看成指针, 任何变量, 哪怕是函数,都可以计算它的指针, 只要记住这点, 就会抓住C和C++程序的核心.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971248.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号