以下程序段执行后结果是()
#include<stdio.h> int main(){ short *p,*q; short arr[15] = {0}; p = q = arr; p++; printf("%d,", p - q); printf("%d,", (char*)p - (char*)q); printf("%d", sizeof(arr) / sizeof(*arr)); }
注意:两个指针变量不能进行加法运算。例如,pf1+pf2是什么意思呢?毫无实际意义。
#define NULL 0 int *p = NULL;
#include<stdio.h> void main() { short *p,*q; short arr[15]={0}; p=q=arr; p++; printf("%p\n",p); printf("%p\n",q); printf("%d,",p-q); printf("%d,",(char*)p-(char*)q); printf("%d",sizeof(arr)/sizeof(*arr)); }
0x7ffd83c53272 0x7ffd83c53270 1,2,15这个题最然我在意的结果就是p-q为什么是1,从地址上看确实应该是2。
#include<iostream> using namespace std; int main() { short *p, *q; short arr[15] = { 0 }; p = q = arr; p++; cout << p << " " << q << " " << p - q << endl; cout << (char*)p << " " << (char*)q << " " << (char*)p - (char*)q<< endl; cout << sizeof(arr) << " " << sizeof(*arr) << " " << sizeof(arr) / sizeof(*arr) << endl; }两指针变量相减
两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。 实际上是两个指针值(地址)相减之差再除以该数组元素的长度(字节数)。 例如pf1和pf2是指向同一浮点数组的两个指针变量,设pf1的值为2010H,pf2的值为2000H,而浮点数组每个元素占4个字节, 所以pf1-pf2的结果为(2000H-2010H)/4=4,表示pf1和 pf2之间相差4个元素。 这样就可以解释为什么是答案分别是1 2了
注意:两个指针变量不能进行加法运算。例如,pf1+pf2是什么意思呢?毫无实际意义。
#define NULL 0 int *p = NULL;