作者markoo (上行下笑阿..)
看板NCTU-STAT98G
标题0721 统算 section 2.cpp
时间Tue Jul 21 12:36:00 2009
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double y=0.1;
double *w;
/* 将变数宣告为指标变数(pointer variable):抓记忆体前不需要加&
下面介绍三种指标变数三种记忆体宣告方式 */
w = &y;
/* Type 1 指标常数宣告:
将指标变数的记忆体指向一个已经宣告的指标常数
ex: w = &y; 此时可由以下发现w与y的记忆体位置相同
此种宣告, 一次只能指向"一个"指标常数 */
printf("Memory Address of w = %x\n",w);//a. 不需要加&
printf("Memory Address of w = %x\n",&w[0]);//b. 需要加&
printf("Memory Address of w = %x\n",&*w);//c. 等同b 需要加&
printf("Memory Address of y = %x\n",&y);//d. 需要加&
/* 将w宣告为指标变数後, w[0]代表第一个值, 其值所在记忆体位址在w
所以抓记忆体位址有三种方式:
第一种:%x 配合w
第二种:%x 配合&w[0]
第三种:%x 配合&*w (这边w[0],*w皆是表示值所以要用&)
(也就是a. b. c是同样显示结果的三种不同写法)
问题:如果宣告为维度2以上的向量w[0],w[1],...,分别为其值
那麽如何抓位址? 这边先想想 答案下面有 */
system("pause");
printf("The old value of w = %lf\n",w[0]);
printf("The old value of y = %lf\n",y);
w[0] = 0.2;
printf("The new value of w = %lf\n",w[0]);
printf("The new value of y = %lf\n",y);
/* 因为y与w共用同个记忆体位置, 所以不管y或者w改变值, 两者同时改变
PS: w已经宣告为向量, 要从w[0]抓值 */
system("pause");
w = (double *) 0x12ff34;
/* Type 2 直接给位址:
直接分配一个8 bytes (相对於double)的记忆体给指标变数
可以从下面从印出来的数字可以看到记忆体的初始位址与所占空间 */
printf("Memory Address of w = %x\n",w);
printf("Memory Address of some variable next to w = %x\n",w+1);
system("pause");
w = (double *) malloc(2*sizeof(double));
/* Type 3 系统分配一组位址:
(double *): 代表资料形态指标宣告
malloc: Memory Allocated,记忆体配置
malloc(个数*资料形态所占的长度): 决定配置记忆体空间大小 */
printf("Memory Address of w = %x\n",w);
printf("Memory Address of w = %x\n",w+1);
/* 宣告w具有2个指标变数分别为w, w+1,其值为w[0],w[1]
上两个printf结果等同下列: */
printf("Memory Address of w = %x\n",&w[0]);
printf("Memory Address of w = %x\n",&w[1]);
/* 或者 */
printf("Memory Address of w = %x\n",&*w);
printf("Memory Address of w = %x\n",&*w+1);
return 0;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.7.248