zoukankan      html  css  js  c++  java
  • 编程题目

    1. 用来演示指向函数的指针。

      // 自增函数:将数值a加1并返回结果
      int inc(int a)
      {
        return(++a);
      }
      // 乘法函数:用来将a,b两指针指向的数值相乘,并将结果存于c指针指向的空间
      int multi(int*a,int*b,int*c)
      {
        return(*c=*a**b);
      }

      typedef int(FUNC1)(int in); //定义一个指定参数类型的函数指针类型FUNC1
      typedef int(FUNC2) (int*,int*,int*); // 定义三个指定参数类型的函数指针类型FUNC2
      void show(FUNC2 fun,int arg1, int*arg2)
      {
       FINC1 p=&inc; // 定义指向1个参数的函数指针p,并指向自增函数inc
      int temp =p(arg1); // 调用处增函数p将arg1数值自增,并把结果存于temp,为10+1=11
      fun(&temp,&arg1, arg2); // 调用传入的函数指针(实为multi),将temp,arg1数值相乘,结果存于arg2指向的空间,为10*11=110
      printf("%d ",*arg2); // 打印乘法结果110
      }

      main()
      {
      int a; // 定义变量a用于存储结果
      show(multi,10,&a); // 调用函数show并传入三个参数:函数指针multi, 数值10,结果变量a的地址
      return 0;
      }
    2. 请找出下面代码中的所有错误 (题目不错,值得一看) 
      说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” #include"string.h" main() { 
      char*src="hello,world"; char* dest=NULL; int len=strlen(src); 
      dest=(char*)malloc(len); char* d=dest; char* s=src[len]; while(len--!=0) d++=s--; 
      printf("%s",dest); return 0; } 答: 
      方法1:一共有4个错误; int main() { 
      char* src = "hello,world"; int len = strlen(src); 
      char* dest = (char*)malloc(len+1);//要为分配一个空间    char* d = dest; char* s = &src[len-1];          //指向最后一个字符 while( len-- != 0 ) *d++=*s--; 
      *d = 0;           //尾部要加’’ printf("%sn",dest); 
      free(dest);        // 使用完,应当释放空间,以免造成内存汇泄露 dest = NULL;   //防止产生野指针 return 0; } 
      方法2: (方法一需要额外的存储空间,效率不高.) 不错的想法 #include <stdio.h> #include <string.h> main()


      char str[]="hello,world"; int len=strlen(str); char t; 
      for(int i=0; i<len/2; i++) { t=str; 
      str=str[len-i-1]; //小心一点 str[len-i-1]=t; } 
      printf("%s",str); return 0; } 

    3. 另一个基本的c语言问题
      unsigned char *p1;
        unsigned long *p2;
        p1=(unsigned char *)0x801000;
        p2=(unsigned long *)0x810000;

        请问p1+5= ;
          p2+5= ;就是一个指针加法中1代表什么的问题
      1代表的是一个单位量
      p1+5=p1+5*1=p1+5*sizeof(unsigned char)=p1+5*1=0x801000+ox5=0x801005
      p2+5=p2+5*1=p2+5*sizeof(unsigned long)=p1+5*4=0x810000+20=0x810000+0x14=0x810014 
    4. 三维数组 嵌套for循环 i,j,k次序问题
      int a[60][250][1000],i,j,k;
      for(k=0;k<=1000;k++)
      for(j=0;j<250;j++)
      for(i=0;i<60;i++)
      a[i][j][k]=0;

      这样是错误的,需要把循环语句i,j,k内外换一下
    5. (a++)*(a++) 禁止这样写

  • 相关阅读:
    【转】理清基本的git(github)流程
    GIT CHEAT SHEET
    failed to push some refs to 'git@github.com:*/learngit.git'
    catch(…) vs catch(CException *)?
    char[]与TCHAR[]互相转换引发的一个问题!
    关于 AfxSocketInit()
    href="#"与href="javascript:void(0)"的区别
    Camera帧率和AE的关系(转)
    详细的摄像头模组工作原理!!!(转)
    高清摄像头MIPI接口与ARM处理器的连接(转)
  • 原文地址:https://www.cnblogs.com/zwei1993/p/5021911.html
Copyright © 2011-2022 走看看