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...