#include <stdio.h> int compare_string(char* a, char* b) { if (a == b) return 0; else return 1; } int main() { char str1[] = "abc"; char str2[] = "abc"; int answer; answer = compare_string(str1, str2); printf("%d\n", answer); return 0; }[Answer] 1
2013年11月21日 星期四
[觀點][C語言]字串是不能比較的
[觀點][C語言]在while(負數)判斷是TRUE,在if(負數)判斷也是TRUE
#include <stdio.h>[answer]
int foo(int x, int y)
{
while(x)
{
++x;
++y;
}
if(y)
{
--y;
}
return x+y;
}
int main()
{
int answer;
answer = foo(-1, -1);
printf("%d\n", answer);
answer = foo(0, -1);
printf("%d\n", answer);
return 0;
}
0
-2
[觀點][C語言](0x7700 && 0x8800) || 0xff00 用%d印出來是1
#include <stdio.h> int main() { int a = 0x7700; int b = 0x8800; int c = 0xff00; int d, e; d = (a && b) || c; e = (a | b) & c; printf("d = %d\n", d); printf("e = %d\n", e); return 0; }[Answer]
1
65280
[觀點][C語言]sizeof各類型別,struct > union == array > char*
#include <stdio.h> union { char chVals[16]; }uu; struct { char chVals[16]; int a; }ss; int main() { char chVals[16]; char* pVals = chVals; printf("%lu\n", sizeof(ss)); printf("%lu\n", sizeof(uu)); printf("%lu\n", sizeof(chVals)); printf("%lu\n", sizeof(pVals)); return 0; }[answer]
20
16
16
4
[觀點][C語言]即使函式內的變數和local變數名稱一樣,但跳出函式後就無關
#include <stdio.h> #include <stdlib.h> void foo(int* x) { x = (int*)malloc(sizeof(int)); *x = 12; } int main() { int x = 10; foo(&x); printf("x = %d\n", x); return 0; }[answer]
x = 10
[觀點][C語言]重新定義一樣的變數名稱,觀察其值的改變
#include <stdio.h> #include <stdlib.h> void foo(int* x) { x = (int*)malloc(sizeof(int)); *x = 12; } int main() { int x = 10; foo(&x); printf("x = %d\n", x); return 0; }[Answer]
a = 7 b = 13
a = 7
[觀點][C語言]x變數在做完logic判斷後,它的值會變成1
#include <stdio.h> int main() { int x = 2; int y = 2; int z; if (x = 2 || y == 2) //x = 1 z = x + y; else z = x - y; printf("z = %d\n", z); return 0; }[Answer]
z = 3
[觀點][C語言]變數沒有initialize,則會有run-time error,硬是要印出來的話,會印出其位址
#include <stdio.h> int main() { int x; while(x < 100) printf("x = %d\n", x); return 0; }[Answer]
run-time error
x = -858993460
[觀點][C語言]n會先--之後才去做<=的比較
#include <stdio.h> void Test(int n) { int i; for (i = 1; i<= --n; i++) printf("i = %d n = %d\n", i, n); } int main() { int x; Test(5); return 0; }[Answer]
i = 1 n = 4
i = 2 n = 3
[觀點][C語言]multi array
#include <stdio.h> int main() { int sum = 0; int i, j; int ary[][4] = {1, 3, 5, 7, 9, 11}; for (i = 0; i <=6; i++) for (j = 0; j <=6; j++) printf("ary[%d][%d] = %d\n", i, j, ary[i][j]); int (*ptr)[4] = ary; sum = (*ptr)[1] + ary [0][3] + ary[1][2]; printf("sum = %d", sum); return 0; }[Answer]
ary[0][0] = 1
ary[0][1] = 3
ary[0][2] = 5
ary[0][3] = 7
ary[0][4] = 9
ary[0][5] = 11
ary[0][6] = 0
ary[1][0] = 9
ary[1][1] = 11
ary[1][2] = 0
ary[1][3] = 0
ary[1][4] = 15773951
ary[1][5] = 0
ary[1][6] = 4195824
ary[2][0] = 15773951
ary[2][1] = 0
ary[2][2] = 4195824
ary[2][3] = 0
ary[2][4] = 0
ary[2][5] = 5
ary[2][6] = 2
ary[3][0] = 0
ary[3][1] = 1
ary[3][2] = 3
ary[3][3] = 0
ary[3][4] = -2050383040
ary[3][5] = 32767
ary[3][6] = 0
ary[4][0] = -2050383040
ary[4][1] = 32767
ary[4][2] = 0
ary[4][3] = 0
ary[4][4] = 0
ary[4][5] = 0
ary[4][6] = -662104211
ary[5][0] = 0
ary[5][1] = 0
ary[5][2] = -662104211
ary[5][3] = 32702
ary[5][4] = 0
ary[5][5] = 0
ary[5][6] = -2050383032
ary[6][0] = 0
ary[6][1] = 0
ary[6][2] = -2050383032
ary[6][3] = 32767
ary[6][4] = 0
ary[6][5] = 1
ary[6][6] = 4195572
sum = 10
[觀點][C語言]#define之後代入的數要小心
#include <stdio.h> #define S(z) (z*z) void foo(int x, int *py) { int n = S(x+1); x = *py; *py = n; } int main() { int a = 2; int b = 10; foo(a, &b); ++b; printf("a = %d b= %d\n", a, b); return 0; }[Answer]
a = 2 b= 6
a = 2代入S(2+1)則2+1*2+1=5,不是3*3=9
[觀點][C語言]array搭配強制型別轉換的pointer, 當轉換小型別轉成大型別的時候, 位址會跟著變, 還有int的加減法和char不同, 單位會是4
#include <stdio.h> char ary[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; char *p1 = ary; char *p2; int *pn; void test() { p1+=2; //p1[0] = 2 pn = (int*)&p1[2]; //p1[2] = 4, char->int之後,pn[0] = 7 pn+=1; //加完之後pn[0] = 8 p1 = (char*)pn; //pn從int->char,還是維持在原位,所以p1[0]=8 --pn; //因為pn是int型別,做加減法會位移4個byte而不是1個byte,所以pn[0]=4 p2 = (char*)pn; //int->char不會縮減,所以p2[0]=4 --p2; //p2是char,所以只會減1個byte,p2[0]=3 } int main() { test(); printf("*p1 = %d *p2= %d\n", *p1, *p2); return 0; }[answer]
*p1 = 8 *p2= 3
訂閱:
文章 (Atom)