C语言基础练习题

文章分析了三个C语言函数关于指针的潜在问题,讨论了内存分配、数组操作、函数原型和栈的行为,以及一个字符串复制函数的正确用法。还涉及了两个程序示例,展示了输入和输出结果以及内存计算。
摘要由CSDN通过智能技术生成
int *f1(void)
{
    int x = 10;
    return(&x);
}
int *f2(void)
{
    int*ptr;
    *ptr=10;
    return ptr;
}
int *f3(void)
{
    int *ptr;
    ptr=(int*)malloc(sizeof(int));
    return ptr;
}
上面这3个函数哪一个最可能引起指针方面的问题
a)只有f3
b)只有f1 and f3
c)只有f1 and f2
d)f1, f2, f3

1、c

main()
{
    int i=3;
    int j;
    j=sizaof(++i+ ++i);
    printf("i=%d j=%d",i,j);
}
这段程序的输出是
a)i=4 j=2
b)i=3 j=2
c)i=3 j=4
d)i=3 j=6

2、i=3 j=8

void f1 (int *,int);
void f2(int *,int);
void(*p[2])(int *,int);
main()
{
    int a;int b;
    p[O]=f1;p[1]=f2;
    a=3;
    b=5;
    p[O](&a,b);
    printf("%d/t %d/t",a,b);
    p[1](&a,b);
    printf("%d/t %d/t",a,b);
}
void f1 (int*p,int q)
{
    int tmp;
    tmp =*p;
    *p =q;
    q=tmp;
}
void f2(int*p,int q)
{
    int tmp;
    tmp =*p;
    p =9;
    q=tmp;
}
这段程序的输出是
a)5 5 5 5
b)3 5 3 5
c)5 3 5 3
d)3 3 3 3 

3、a

void e(int );
main ()
{
    int a;
    a-3;
    e (a);
}
void e(int n)
{
    if(n>0)
    {
        e(--n);
        printf("%d”,n);
        e(--n);    
    }
}
这段程序的输出是
a)0 1 2 0
b)0 1 2 1
c)1 2 0 1
d)0 2 1 1

4、a

typedef int(*test)( float *, float*)
test tmp;
tmp的类型是
a)函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments)
Pointer to function of having two arguments that is pointer to float
b)整型
c)函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments)并且函数的返回值类型是整型
Pointer to function having two argument that is pointer to float and return int
d)以上都不是

 5、c

main()
{
    char p;
    char buf[10] ={1,2,3,4,5,6,9,8};
    p=(buf+1)[5];
    printf("%d”,p);
}
这段程序的输出是:
a)5
b)6
c)9
d)以上都不对

6、c

void f(char**);
main()
{
    char * argv[] = { "ab","cd", "ef","gh, “ij","kl"};
    f( argv );
}
void f( char **p)
{
    char* t;
    t=(p+= sizeof(int))[-1];
    printf( "%s",t);
}
这段程序的输出是
a)ab
b)cd
c)ef
d)gh

7、d

一个栈的输出队列是1,2,3,4,5,下列不可能输出的是
a)2 3 4 1 5
b)5 4 1 3 2
c)2 3 1 4 5
d)1 5 4 3 2
请选出其中一个并说明原因

8、b栈后进先出 先输出5,代表前面都没有出栈

#include<stdio. h>
main ()
{
    int a, b, c, d;
    a=10;
    b=a++;
    c=++a;
    d=10*a++;
    printf(b, c, d: %d, %d, %", b, c, d);
    return ;
}
请写出代码的输出内容

9、b,c,d:10,12,120

main ()
{
    int a[5]={1,2, 3, 4,5} ;
    int *ptr=(int *)(&a+1);
    printf("%d, %d",*(a+1),*(ptr-1));
}
请写出代码的输出内容

10、2   5

#define MAX 255
int main ()
{
    unsigned char A[MAX],i;
    for (i=0;i<=MAX;i++)
        A[i]=i;
}
请问这个程序运行结果是什么?

11、0~254共255个元素,当A[255]=255是会发生越界访问

#include "stdio. h"
int main()
{
    int a,b,c,abc=o;
    a=b=c=40;
    if(c)
    {
        int abc = 10;
        abc =a*b+c++;    
    }
    printf( "%d, %d",abc, c);
    return 0;
}
以上代码运行结果是什么?

12、1640   41

数字推理
a)10,20,15,15,20,9,?
b)10,0,40,20,160,40,?
a)
b)

13、25   640

在不定义临时变量的情况下,完成Exchange函数以交换a,b的值
void Exchange(int *a,int *b)
{}

14、*a=*a+*b    *b=*a-*b     *a=*a-*b

unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
请问
p1+5=
p2+5=

15、0x801028    0x810028

下面的程序使用专门的new_strcpy函数将字符串src_buff复制到字符串dest_buff中。为了不破坏复制源的内容,在对new_strcpy函数进行函数原型声明时,从a.到d.中选择const修饰符的位置

void new_strcpy(char * s1, char * s2);//*函数原型声明*/
int main(void)
{
    char src_buff[]="ABC";  /*复制源*/
    char dest_buff[5];   /*复制目的地*/
    new_strcpy(dest_buff,src_buff);
            :
            :
}

16、c

下面的for语句运行后,sum的值时多少,请用10进制数回答
int sum=0;
int i;
for(i=1;i<10;i=i+1)
{
    sum+=i;
}
sum=

17、45

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Yoyozi_wu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值