先看题,尝试写结果
#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));
}
①首先搞懂指针相减的值如何计算:
指针相减的值是 指针地址的偏移 除以 指针每次移位的大小
②指针地址的偏移:
随着数据类型的不同而产生的偏移量不同,
如short类型 p++与原本p的地址偏移量是2个字节
,而char类型大小是1字节
int *p1 p1+1 1为sizeof( int ) , 4
即加减n ,就是加减 n 个类型大小
③指针移位:
short p++相对于原来的p 即q,指针移位2字节
char p++相对于原来的p 即q,指针移位1字节
④结果计算:
1.p-q 即为 (short)p -(short)q = 2/2=1
2.(char*)p - (char*)q) = 2/1=2
3.sizeof(arr)表示的是arr数组的第一个字符所占的大小为2个字节,sizeof(arr)表示数组所有元素的字节个数为152=30个字节。两者相除代表数组元素个数。
故答案为 1, 2 ,15
|| ** 如有问题和不足之处,欢迎一起交流学习** | |