c语言中指针计算的问题

在c语言中看到如下概念
pf1和pf2 是指向同一浮点数组的两个指针变量
设 pf1的值为2010H
pf2的值为2000H
而浮点数组每个元素占4个字节
所以pf1-pf2的结果为(2000H-2010H)/4=4,表示pf1和 pf2之间相差4个元素。

问题一:2010H是一种什么数字表示 还没有见过这么表示的
问题二:为什么(2000H-2010H)/4=4是怎样计算得到的 ?

问题一:
2010H是内存地址的表示形式。内容中的地址都是以十六进制表示的。H表示这是个十六进制数。

问题二:
2010H-2000H=10H。这是个十六进制数。一个字节用一个地址表示。10H转换成十进制数就是16。这就表示2010H和2000H这两个地址之间相差16个字节。
因为浮点数组,每个元素占4个字节,16/4=4。所以pf1和pf2之间相差4个元素。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-02-26
简单的说 指针是用来装地址的,2010h是十六进制的地址值
类型个数=总大小/类型大小

c语言中指针计算的问题
问题一:2010H是内存地址的表示形式。内容中的地址都是以十六进制表示的。H表示这是个十六进制数。问题二:2010H-2000H=10H。这是个十六进制数。一个字节用一个地址表示。10H转换成十进制数就是16。这就表示2010H和2000H这两个地址之间相差16个字节。因为浮点数组,每个元素占4个字节,16\/4=4。所...

C语言指针问题
一、如有定义char y[4]= "321"则表达式 *y+2的值是'5' 。分析:y是字符串数组首元素'3'的地址,*y的值就是字符'3',再加上2,就是字符'5'(也可以说是字符'5'的ASC码值)。二、 如有定义char z[2][4]={"MAT", "LAB"};,则表达式*(*z+2)的值是 'T'。分析:z是二维字符...

c语言指针问题
就是 char *p=*s; 或 等价于: 声明 char *p; 语句 p=*s; 让 p 指向 char s[3][8];的始地址 &s[0][0]。 目的是 让 p 有了字符\/字符串存放空间。你也可以理解: p=*s; 即 p= *(s+0); 即 p=s[0]; p=&s[0][0];p 有了字符\/字符串存放空间。

C语言指针问题?
调用结束后,所有实际参数的值均不会发生变化。但是swap3中*pa,*pb发生的交换(实际就是主函数中a和b的值发生了交换)

关于c语言指针的一些问题
指针p 指向的单元 内容为 a [0] 3、a 是数组名的时候是正确的 他表示 a[0] = 指针p所指单元的内容。其实 理解指针的话 有一个很好的 方法 你可以把 指针变量p当做一个数组名 那么*p 也就表示 p[0] p也就表示指针 p 然后你就会知道该如何赋值了 。希望对你有所帮助 ...

C语言指针问题
还比如a+++b,表达式解析时是从左到右,所以先判断为a的右侧操作,所以先取值后递增,取值后再与b相加。其二,递增递减操作在变量左侧的会立刻影响当前取值,因为它是先运算再取值,而在右侧操作的会影响后续代码的变量取值,但不改变当前对变量的取值,因为在递增递减前当前取值已经完成。

c语言,指针指向另一个指针的问题,为什么报错?
图中红色框内代码有误,*(p+5)不是表示指针而是值。应改为 q = p+5 另外补充说明,改成这样虽然没有语法错误,但是很明显p+5已经超过数组a的内存空间,需要注意。

C语言指针问题,求高手解答
char* ss = "0123456789";要求这种字符串的长度是不能用sizeof的,如果用sizeof它计算出来的会是这个指针的长度,在32系统下,指针一般都是4个字节,所以,结果是4。计算字符串的长度,可以使用库函数strlen来计算,它计算出来的长度不包含字符串结束符\\0。有了这个思路,其实你可以自己写一个函数来...

C语言的指针问题
程序从main函数开始执行。fun(&y,&x)和fun(int *x,int *y)对应。*x==y,*y==x;所以*x=2;*y==1;所以fun()输出21;在fun函数最后,*x=3,*y=4;因为y==*x,x==*y,所以y=3,x=4;因为&y,&x是引用,是对同一个地址内的变量进行操作,所以x,y的值会变化。

c语言这几道题 关于指针的 望大神解答
2、A之所以错是因为代码中有一句q=NULL,也就是说q是一个空指针了,你再向里面写东西就错了,而且你在vc6.0中可以试一下,马上会出现一条0xc000 0005的写异常。。3、是的,你不管给它赋值多少都是4的。。就好比一个4平方米的房子,你装多少东西,装什么东西,它都是4平方米。有问题继续追问...

相似回答
大家正在搜