📜  C指针测试2

📅  最后修改于: 2020-10-23 05:37:28             🧑  作者: Mango

C指针测试2

6)程序的输出是什么?

#include
#include
int main()
{
    int j, k;
    char *z="Hello ";
    k = strlen(z);
    *z = z[k];
    for(j=0; j<=k; j++)
    {
        printf("%s  ", z);
        z++;
    }
    printf("\n", z);
    return 0;
}
  1. Hello
  2. olleH
  3. ello llo lo o
  4. Hello ello llo lo o

正确的选项是(c)。

说明:

由于C语言是机器相关的语言。因此,它将在其他平台上提供不同的输出(取决于机器和编译器)。

如果我们使用Turbo C在Windows平台上执行和编译该程序,则它将给出输出“ ello llo lo o”。

如果我们使用GCC编译器在Linux平台上执行和编译该程序,则它将给出输出“ Hello ello llo lo o”。

7)DOS(磁盘操作系统)中的far,near和huge指针占用多少字节?

  1. near=4 far=8 huge=8
  2. near=4 far=4 huge=8
  3. near=2 far=4 huge=4
  4. near=2 far=4 huge=8

正确的选项是(c)。

说明:

在Linux和Windows下,每个指针的长度为4个字节。

在DOS下,near,far和huge指针的值是:

  • near= 2
  • far= 4
  • huge= 4

8)程序的输出是什么?

#include
int main()
{
    int *i;
    void fun(int**);
    fun(&i);
    return 0;
}
void fun(int **j)
{
    int b=10;
    /* Statement is add here */
}
  1. ** j = b
  2. j =&b
  3. * j =&b
  4. &j = * b

正确的选项是(c)。

说明:

在普通的指针分配中,当函数(fun())时,它将作为(j)接收,因此对j执行的任何操作都将在main的i处返回。

函数调用后,

  1. &i = ** j
  2. i = * j
  3. 在fun()函数,
  4. * j =&b
  5. 所以,我=&b

因此,当我们使用语句* j =&b时,(b)的地址将存储在(i)中

9)下面的程序报告编译错误。

#include
int main()
{
    float j=12, *i;
    void *a;
    a=&j;
    i=a;
    printf("%f\n", *i);
    return 0;
}

正确的选项是(b)。

说明:

在Linux下的GCC和DOS下的Turbo C中编译程序时没有错误。

该程序的输出为12.000000。

10)三个声明char ** ball,char * ball []和char ball [] []是否相同?

正确的选项是(b)。

说明:

不,三个声明char ** ball,char * ball []和char ball [] []是不同的。

char ** ball-是双指针

char * ball []-它是一个指针数组

char ball [] []-它是二维数组。