c基础的测试题

文章探讨了C语言中的内存管理函数如malloc、strcpy,以及指针使用时可能遇到的问题,如内存泄漏、局部变量作用域、指针赋值和函数指针。涉及的示例展示了如何正确和错误地操作内存,强调了正确处理指针和内存分配的重要性。
摘要由CSDN通过智能技术生成
void GetMemory(char *p)
{
    p=(char *)malloc(100);
}
void Test(void)
{
    char *str = NULL;
    GetMemory(str);
    strcpy(str,"hello world");
    printf(str);
}
请问运行Test函数的运行结果是什么?

1、运行结果是 未定义,可能出现段错误,主要原因是GetMemory函数没有正确地修改Test函数中str指针的值

char *GetMemory(void)
{
    char p[] = "hello world";
    return p;
}
void Test(void)
{
    char *str = NULL;
    str = GetMemory();
    printf(str);
}
请问运行Test函数的运行结果是什么?

2、该题运行的结果不可预测,可能会导致出现段错误,主要原因GetMemory函数返回了指向局部数组p的指针,而该数组在函数返回后就已经不存在了

void GetMemory(char **p,int num)
{
    *p = (char *)malloc(num);
}
void Test(void)
{
    char *str = NULL;
    GetMemory(&str,100);
    strcpy(str,"hello");
    printf(str);
}
请问运行Test函数的运行结果是什么?

3、malloc(num)只分配了num 字节的内存,但没有为字符串的终止 null 字符(\0)分配额外的空间,

        printf(str); 是不正确的,因为它没有指定格式字符串

        如果 malloc 成功分配了内存,但随后程序没有通过 free 释放它,那么就会发生内存泄漏

        如果 malloc 调用失败(例如,由于内存不足),它将返回 NULL。在这种情况下,strcpy(str, "hello"); 将尝试向 NULL 指针写入数据,这会导致运行时错误        

最终结果时程序不正确,无法正确输出

void Test(void)
{
    char *str = (char *)malloc(100);
    strcpy(str,"hello");
    free(str);
    if(str!=NULL)
    {
        strcpy(str,"world");
        printf(str);    
    }
}
请问运行Test函数的运行结果是什么?

 4、Test 函数的运行结果是不确定的,很可能导致程序崩溃或产生其他严重的错误,

实际上是一个野指针

用变量啊给出下面的定义
a)一个整型数
b)一个指向整型数的指针
c)一个指向指针的指针,她指向的指针是指向一个整型数
d)一个有10个整型数的数组
e)一个有10个指针的数组,该指针是指向一个整形数的
f)一个指向有10个整型数数组的指针
g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数
h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

 5、a)int a      b)int *p=&a     c)int **p=p   d)int arr[10]

      e)int *p[10]     f)int *p=arr     g)int(*p)(int)      h)int(*p)(int)[10]

char str[] = "Hello";
char *p = str;
int n = 10;
请计算
sizeof(str) = 
sizeof(p) = 
sizeof(n) = 

 6、str=6 p=8 n=4

void Func(char str[100])
{
}
请计算
sizeof(str) = 

7、 8

void *p = malloc;
请计算
sizeof(p) = 

8、 8

int counter(int i)
{
    static int count = 0;
    count = count+i;
    return(count);
}
main()
{
    int i,j;
    for(i=0;i<=5;i++)
    {
        j=counter(i);    
    }
}
本程序直行道最后j的值是
(a)10
(b)15
(c)6
(d)7

9、 b

main()
{
    struct node
    {
        int a;
        int b;
        int c;    
    };
    struct node s = {3,5,6};
    struct node *pt = &s;
    printf("%d",*(int*)pt);
}
这段程序的输出是:
a)3
b)5
c)6
d)7

10、 a

int foo(int x,int n)
{
    int val;
    val = 1;
    if(n>0)
    {
        if(n%2==1) val = val *x; 
        val = val * foo(x*x,n/2);   
    }
    return val;
}
这段代码对x和n完成什么样的功能(操作)?
a)x^n(x的n次幂)
b)x*n(x与n的乘积)
c)n^x(n的x次幂)
d)以上均不是

11、 a

main()
{
    int a[5] = {1,2,3,4,5};
    int *ptr = (int*)(&a+1);
    printf("%d %d",*(a+1),*(ptr-1));
}
这段程序的输出是:
a)2 2
b)2 1
c)2 5
d)以上均不是

12、 c

void foo(int [][3])
main()
{
    int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
    foo(a);
    printf("%d",a[2][1]);
}
void foo(int b[][3])
{
    ++b;
    b[1][1]=9;
}
这段程序的输出是:
a)8
b)9
c)7
d)以上均不对

13、 a

main()
{
    int a,b,c,d;
    a=3;
    b=5;
    c=a,b;
    d=(a,b);
    printf("c=%d",c);
    printf("d=%d",d);
}
这段程序的输出是:
a)c=3 d=3
b)c=5 d=3
c)c=3 d=5
d)c=5 d=5

14、 c

main()
{
    int a[][3] = {1,2,3 ,4,5,6};
    int (*ptr)[3]=a;
    printf("%d %d",(*ptr)[1],(*ptr)[2]);
    ++ptr;
    printf("%d %d",(*ptr)[1],(*ptr)[2]);
}
这段程序的输出是:
a)2 3 5 6
b)2 3 4 5
c)4 5 0 0
d)以上均不对

15、a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yoyozi_wu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值