C語言記錄

2021-09-02 12:57:00 字數 2659 閱讀 5658

1.定義乙個巨集#define swap(x,y)交換x,y的值

#include "stdio.h"

#define swap(x,y)

int main()

2.堆疊溢位的原因:

1.函式呼叫太深(函式呼叫時會先入棧,也就是保護現場的產生的變數)(棧溢位)

2.動態申請的空間使用後沒有釋放(堆溢位)

3.陣列訪問越界

4.指標非法訪問

5.區域性陣列過大

3.堆疊的釋放

1.堆:由malloc分配,由free釋放,也就是說程式設計師自己申請的空間自己釋放

2.棧:由編譯器釋放

4.ifndef/define/endif 的作用

防止該標頭檔案被重複引用
5.

void test1()

編譯器報錯,原因:str1實際佔11個位元組,陣列越界

6.

void test1()

int main()

輸出結果:

a:20,b:10

int *:8,char *:8

string size:10,str1 size:8

7.set & clear

set:|=

clear:&=~

8.記憶體對齊

9.程序間通訊的幾種方式

無名管道、有名管道、訊息佇列、訊號、訊號量、共享記憶體

10.大端小端

11.測試程式:

#include "stdio.h"

#include "string.h"

#define swap(x,y) \

y = x + y ;\

x = y - x ;\

y = y - x ;

struct s1

;struct s2

;void test2()

; int *ptr=(int *)(&a+1);

printf("%d,%d\n",*(a+1),*(ptr-1));

}void test1()

void test4()

printf("i = %d\n",i);

}void test5()

int main()

12.整數反轉

#include #include #include #define int_max  2147483647 

#define int_min -2147483648

int conver(int a)

return num;

}int main()

13.big-little-endian

#include #include int test()

int main()

14.malloc

#include #include #include void getmemory(char *p)

int main()

15.atoi實現

int myatoi(char* str) 

for(int i=0;i='0'&&str[i]<='9'))else return 0;

}}

if(str[s] == '-')else if(str[s] == '+')

for(int i=s;i='0'&&str[i]<='9');i++)

else

num = num * 10 + c;

}return num*convert;

}

16.itoa實現

#include #include #include #define int_max  2147483647 

#define int_min -2147483648

int myatoi(const char *s)

for(int i=0;i='0'&&s[i]<='9')

} if(s[0] == '-')

return -num;

else

return num; }

int myitoa(int n,char *s)

if(num == 0)

while(num)

s[i] = '\0';

len = i-1;

if(n<0)

else

printf("%s\n",s);

while(i17.compare_zero

#include int main()

18.string_conver

#include #include #include int conver(char *s)

while(*p2!='\0')

p2--;

while(p1return 0;

}int main()

C語言活動記錄

活動記錄,就是在程式執行的過程中函式呼叫時棧上的內容變化。乙個函式被呼叫,反映在棧上的與之相關的內容被稱為一幀,其中包含了引數 返回位址 老ebp值 區域性變數以及esp和ebp。c語言預設的呼叫規約為cdecl,引數從右往左依次入棧,之後是函式的返回位址入棧,接著是老ebp入棧。esp是棧頂指標,...

C語言報錯記錄

大學以及讀研做課題基本都是再用python和matlab,現重拾c c 碰到很多問題,在此記錄,方便自己學習,需要者參考以及交流討論。problem1 二維陣列賦字串 會出現報錯紅線,顯示左側需為modifiable value。解決方案 陣列賦值一般需要做迴圈送給。但是此時出現第二個錯誤 prob...

C語言基礎,記錄

1 sds hdr var 8,s 表示使用 struct sdshdr8,入參中的t來替換後面的 t。define sds hdr var t,s struct sdshdr t sh void s sizeof struct sdshdr t 2 char s 表示取 字元s 的記憶體首位址 3...