更多“设有以下程序片段:char a[ ]="hello",*p;p=a;printf("%d",*(p+5));执行上面的程序片段后的结果为( ) ”相关问题
  • 第1题:

    有以下程序: include void funl (char * p){char * q; q=p; while( *q! ='\0') } (*q)

    有以下程序: #include <stdio.h>void funl (char * p){ char * q; q=p; while( *q! ='\0') } (*q) ++;q++;}mains( ){ char a[ ] = { "Program" } , * p; p = &a[3]; fun1 (p); printf("% s \n" ,a);}程序执行后的输出结果是( )。

    A.Prohsbn

    B.Prphsbn

    C.Progsbn

    D.Program


    正确答案:A
    解析:在main函数中,p=&a[3]说明指针p指向a数组的第4个字符(即字符'g');fun1中的q=p意味着指针q也指向了a数组的第4个字符。执行while语句,表达式(*q)++使'g'+1,使'g'变成了'h';表达式q++使q指向a[4]的起始地址。继续执行while语句,直到遇到'\0'结束循环,返回形参。最终得到的结果是从字符串"Program'的第4个字符开始,每个字符加1。

  • 第2题:

    有以下程序: void funl(char*p) { char*q; q=P; while(*q!=\O) {(*q)++;q++;} } main { char a[]={"Program"),*P; p=&a[3];funl(p); printf("%s\n",a); } 程序执行后的输出结果是( )。

    A.Prohsbn

    B.Prphsbn

    C.Progsbn

    D.Program


    正确答案:A
    本题中使用了函数的调用,由{unl函数中的while循环可知,循环的作用是为了把q所指向的内容增加l,而从主函数传到函数时是从下标为3开始传,因此当调用函数执行完后,传过去的字符串为hsbn,前面不变。

  • 第3题:

    执行下列程序段后,*(p+5)的值是() static char s[ ]=”Hello”; char *p; p=s;

    A.‘o’

    B.‘0’

    C.‘o’的地址

    D.不确定的值


    ‘ \0 ’

  • 第4题:

    下面的程序各自独立,请问执行下面的四个TestMemory 函数各有什么样的结果?

    ①void GetMemory(char * p)

    {

    p = (char * )malloc(100);

    }

    void TestMemory (void)

    {

    char *str = NULL;

    GetMemory (str);

    strcpy(str, "hello world");

    prinff(str);

    }

    ② char * GetMemory (void)

    {

    char p[ ] = "hello world";

    return p;

    }

    void TestMemory (void)

    {

    char * str = NULL;

    str = GetMemory( );

    printf(str);

    }

    ③void GetMemory(char * * p, int num)

    {

    * p = (char * )malloc(num);

    }

    void TestMemory (void)

    {

    char * str = NULL;

    GetMemory(&str, 100);

    strcpy( str, "hello" );

    printf(sir);

    }

    ④void TestMemory (void)

    {

    char *str = (char * )malloe(100);

    strepy (str, "hello" );

    free ( str );

    if(str ! = NULL)

    {

    strepy( str, "world" );

    printf(str);

    }

    }


    正确答案:程序1程序崩溃。因为GetMemory并不能传递动态内存TestMemory函数中的str一直都是 NULL。strcpy(str “hello world”);将使程序崩溃。 程序2可能是乱码。因为GetMemory返回的是指向“栈内存”的指针该指针的地址不是 NULL但其原来的内容已经被清除新内容不可知。 程序3能够输出hello但是会发生内存泄漏。 程序4篡改动态内存区的内容后果难以预料非常危险。因为free(str);之后str成为野指针if(str!=NULL)语句不起作用。
    程序1程序崩溃。因为GetMemory并不能传递动态内存,TestMemory函数中的str一直都是 NULL。strcpy(str, “hello world”);将使程序崩溃。 程序2可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原来的内容已经被清除,新内容不可知。 程序3能够输出hello,但是会发生内存泄漏。 程序4篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str!=NULL)语句不起作用。

  • 第5题:

    35、以下程序的运行结果是___________。 void print(char *s){ printf("%s", s); } int main(){ char *p, *q; char str[]="Hello, World\n"; q=p=str; p++; printf(q); printf(p); return 0; }

    A.H e

    B.Hello, World ello, World

    C.Hello, World Hello, World

    D.ello, World llo, World


    x=3