C語言學習筆記

C語言知識點

標簽(空格分隔): c


這篇文檔將會不斷更新

#include <stdio.h>
int main()
{
    int i=0,a=1,b=2,c=3;
    i=++a||++b||++c;
    printf("%d %d %d %d",i,a,b,c);
}
結果是1 2 2 3
解釋:||運算符的"懶惰性" ++a為2而且是或的關系 i肯定為1 就不繼續(xù)執(zhí)行了

字符串要注意的###

char ccString1[]="Is Page Fault??";
char ccString2[]="No Page Fault??";
strcpy(ccString1,"No");
if(strcmp(ccString1,ccString2)==0)
   cout<<ccString2;
else
   cout<<ccString1;
   
執(zhí)行strcpy(ccString1,"No"); ,ccString1變?yōu)?No\0Page Fault??",會將字符串的結束符'\0'放入,所以比較時返回false,執(zhí)行cout << ccString1; 輸出時遇到結束符'\0'就結束,只輸出“No”
----------------------------------------------------------------
char dog[]="wang\0miao;
sizeof(dog)為10
strlen(dog)為4
wang,miao占8個字節(jié)
'\0'占一個字節(jié) 但是會隱形的加上一個'\0'故sizeof(dog)為10
strlen()計算字符串長度遇到'\0'就停下來了
Linux下多少個"-"將被打?。?int main(void){
  int i;
  for(i=0;i<4;i++){
  fork();
  printf("-\n");
 }
 return 0;
}
考察fork()
2+4+8+16 = 30

堆與棧的區(qū)別###

堆是使用malloc()、calloc()、realloc()等函數(shù)動態(tài)分配的,不可能靜態(tài)分配,使用alloca()函數(shù)可以動態(tài)分配棧的內(nèi)存空間,釋放的時候由編譯器自己釋放。

不同平臺上的字節(jié)數(shù)###

(1)16位平臺  
char         1個字節(jié)8位 
short        2個字節(jié)16位 
int          2個字節(jié)16位
long         4個字節(jié)32位 
指針         2個字節(jié)16位  
(2)32位平臺  
char         1個字節(jié)8位 
short        2個字節(jié)16位 
int          4個字節(jié)32位 
long         4個字節(jié)32位
long long    8個字節(jié)64位  
指針         4個字節(jié)32位  
(3)64位平臺  
char         1個字節(jié) 
short        2個字節(jié)
 int         4個字節(jié)  
long         8個字節(jié)(區(qū)別) 
long long    8個字節(jié)  
指針         8個字節(jié)(區(qū)別)

#include <stdio.h>
#include <stdlib.h>

struct A{
   unsigned int a; //對于開始連續(xù)的第一個8字節(jié)內(nèi)存,a占4字節(jié) 
   char b[2];//b[]占1*2字節(jié),在a后的連續(xù)2字節(jié)內(nèi)存放,還剩2個
   double c;//c占8字節(jié),第一個8字節(jié)還剩2字節(jié)不足以存放c,自動補充該2字節(jié)。并同時開辟第二個8字節(jié)內(nèi)存存放c
   short d; //d占2字節(jié),開辟第三個8字節(jié),存放d。剩余的6個字節(jié)補齊。故總共開辟了8*3=24字節(jié)存放該數(shù)據(jù)結構

};
int main()
{
    printf("%d\n",sizeof(A));
    getchar();
    return 0;
}
結果為24
case 后面的常量表達式實際上只起語句標號作用 , 而不起條件判斷作用 , 即 " 只是開始執(zhí)行處的入口標號 ".  因此 , 一旦與 switch 后面圓括號中表達式的值匹配 , 就從此標號處開始執(zhí)行 , 而且執(zhí)行完一個 case 后面的語句后 , 若沒遇到 break 語句 , 就自動進入 下一個 case 繼續(xù)執(zhí)行 , 而不在判斷是否與之匹配 , 直到遇到 break 語句才停止執(zhí)行 , 退出 break 語句 . 因此 , 若想執(zhí)行一個 case 分之后立即跳出  switch 語句 , 就必須在此分支的最后添加一個 break 語句 .

#include <stdio.h>
 
int main()
{
 char x = 'B';
 switch (x){
   case 'A':printf("A");
   case 'B':printf("B");
   case 'C':printf("C");
   default: printf("D");
 }
 結果為BCD
void change(int*a, int&b, int c){ 
    c=*a; 
    b=30; 
    *a=20;
}
int main ( ){ 
     int a=10, b=20, c=30; 
     change(&a,b,c); 
     printf(“%d,%d,%d,”,a,b,c); 
     return 0;
}
傳值、傳指針、傳引用;其中傳值不會改變變量的值,傳指針和傳引用會改變變量的值。
傳值的情況,函數(shù)的參數(shù)會產(chǎn)生臨時空間,函數(shù)結束就會釋放空間,因此不會改變主函數(shù)中變量的值;
傳指針即傳遞的是地址,將主函數(shù)中變量的地址傳到函數(shù)中,而不會產(chǎn)生臨時變量,因此會改變量的值;
傳引用的情況,就是傳遞的變量的別名,因此也會改變變量的值。
C語言math庫中floor函數(shù)和fabs的編寫
double floor(double x)
{
    return (double)(int)x;
}

double Fabs(double x)  
{  
    return x>1e-10?x:-x;  
}

C語言math exp(x)函數(shù)和log(x)函數(shù)的編寫
double Exp(double X)
{
    double Result=1.0,Precious=X,Xn=1.0,Fac=1.0;
    int n=1;
    while(Precious>1e-6)
    {
        Fac*=n;
        Xn*=X;
        Precious=Xn/Fac;
        Result+=Precious;
        n++;
    }
    return Result;
}

double Log( double a )
{
    int N = 150;
    int k,nk;
    double x,xx,y;
    x = (a-1)/(a+1);
    xx = x*x;
    nk = 2*N + 1;
    y = 1.0/nk;
    for(k=N;k>0;k--)
    {
        nk = nk - 2;
        y = 1.0/nk + xx*y;
    }
    return 2.0*x*y;
}
詳情見《實用數(shù)值算法》
double Pow(double X,double Y)
{
    return Exp(Y*Log(X));
}

double Sqrt(double X)  
{  
  return Pow(X,0.5);  
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • C語言中內(nèi)存分配 在任何程序設計環(huán)境及語言中,內(nèi)存管理都十分重要。在目前的計算機系統(tǒng)或嵌入式系統(tǒng)中,內(nèi)存資源仍然是...
    一生信仰閱讀 1,315評論 0 2
  • C語言筆記 1.Printf輸出函數(shù)語法printf的語法 輸出語句(1)printf("你想輸出的內(nèi)容");(...
    wangbei8855閱讀 565評論 0 2
  • 第一個C語言程序: 1.#include 是C語言的預處理指令,所謂預處理指令就是在編譯之前作得處理,通常以#開頭...
    追風箏的蝙蝠俠閱讀 537評論 0 0
  • 第一部分C語言的組成 一.基本數(shù)據(jù)類型 java中有八中基本數(shù)據(jù)類型,而在c/c++中沒有byte和boolean...
    lemonCode閱讀 478評論 0 1
  • C/C++格式化字符串說明 C++的格式化字符串經(jīng)常用作格式化數(shù)字的輸出、字符串合并和轉換等等很多場合。 1. 格...
    優(yōu)質(zhì)睡眠閱讀 409評論 0 0

友情鏈接更多精彩內(nèi)容