📜  C程序的输出| 24套

📅  最后修改于: 2022-05-13 01:56:11.117000             🧑  作者: Mango

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