#include
int main()
{
int arr[] = {10, 20, 30, 40, 50, 60};
int *ptr1 = arr;
int *ptr2 = arr + 5;
printf("Number of elements between two pointer are: %d.",
(ptr2 - ptr1));
printf("Number of bytes between two pointers are: %d",
(char*)ptr2 - (char*) ptr1);
return 0;
}
假设一个int变量占用4个字节,而char变量占用1个字节
(A)两个指针之间的元素数目为:5。
两个指针之间的字节数为:20
(B)两个指针之间的元素数为:20。
两个指针之间的字节数为:20
(C)两个指针之间的元素数目为:5。
两个指针之间的字节数是:5
(D)编译器错误
(E)运行时错误答案: (A)
说明:数组名给出数组中第一个元素的地址。因此,当我们执行’* ptr1 = arr;’时,ptr1开始保存元素10的地址。由于使用指针进行了算术运算,因此’arr + 5’给出了第6个元素的地址。所以’ptr2-ptr1’给出5。当我们执行’(char *)ptr2’时,ptr2被类型转换为char指针,并且字符的大小为1个字节,指针算术在考虑字符指针的情况下发生。因此,我们得到5 * sizeof(int)/ sizeof(char)作为两个指针的差。
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。