編程題目

  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\n",*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;           //尾部要加’\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++) 禁止這樣寫spa

相關文章
相關標籤/搜索