C程序的输出| 24套
预测以下 C 程序的输出:
难度等级:菜鸟
问题 1
C
#include
int main()
{
int arr[] = {10, 20, 30, 40, 50, 60};
int *ptr1 = arr;
int *ptr2 = arr + 5;
printf ("ptr2 - ptr1 = %d\n", ptr2 - ptr1);
printf ("(char*)ptr2 - (char*) ptr1 = %d", (char*)ptr2 - (char*)ptr1);
getchar();
return 0;
}
C
#include
int main()
{
char arr[] = "geeksforgeeks";
char *ptr1 = arr;
char *ptr2 = ptr1 + 3;
printf ("ptr2 - ptr1 = %d\n", ptr2 - ptr1);
printf ("(int*)ptr2 - (int*) ptr1 = %d", (int*)ptr2 - (int*)ptr1);
getchar();
return 0;
}
C
#include
int main()
{
char arr[] = "geeks\0 for geeks";
char *str = "geeks\0 for geeks";
printf ("arr = %s, sizeof(arr) = %d \n", arr, sizeof(arr));
printf ("str = %s, sizeof(str) = %d", str, sizeof(str));
getchar();
return 0;
}
输出:
ptr2 - ptr1 = 5
(char*)ptr2 - (char*) ptr1 = 20
在 C 中,数组名给出数组中第一个元素的地址。所以当我们做 ptr1 = arr 时,ptr1 开始指向 arr 的第一个元素的地址。由于使用指针算法访问数组元素,因此 arr + 5 是一个有效表达式,并给出第 6 个元素的地址。预测值 ptr2 – ptr1 很容易,它给出 5,因为这两个地址之间有 5 个整数。当我们执行 (char *)ptr2 时,ptr2 被类型转换为 char 指针。在表达式“(int*)ptr2 – (int*)ptr1”中,指针算术发生在考虑字符指针的情况下。由于字符的大小是一个字节,我们得到 5*sizeof(int)(即 20)作为两个指针的差值。
作为练习,预测以下程序的输出。
C
#include
int main()
{
char arr[] = "geeksforgeeks";
char *ptr1 = arr;
char *ptr2 = ptr1 + 3;
printf ("ptr2 - ptr1 = %d\n", ptr2 - ptr1);
printf ("(int*)ptr2 - (int*) ptr1 = %d", (int*)ptr2 - (int*)ptr1);
getchar();
return 0;
}
问题2
C
#include
int main()
{
char arr[] = "geeks\0 for geeks";
char *str = "geeks\0 for geeks";
printf ("arr = %s, sizeof(arr) = %d \n", arr, sizeof(arr));
printf ("str = %s, sizeof(str) = %d", str, sizeof(str));
getchar();
return 0;
}
输出:
arr = geeks, sizeof(arr) = 17
str = geeks, sizeof(str) = 4