int a[2][2]={{1},{2,3}}; → a[0][1] 未顯式初始化,自動為 0。int (*ptr)(); 是函數指針,指向返回 int、無參函數,非數組名。==/!=;>/< 無意義(不同分配區地址不可比大小)。switch 控制表達式必須為整型(int/char/short/enum),不可為 float。#define print(x) printf("the no, " #x ", is ") — #x 字符串化參數,合法。char str[] = "Hello"; // 6 字節含 \0
char *p = str;
int n = 10;
sizeof(str) → 6
sizeof(p) → 4
sizeof(n) → 4
void func(char str[100]) { }
sizeof(str) → 4 (退化為指針)
void setmemory(char **p, int num) { *p = malloc(num); }
void test() { char *s=NULL; setmemory(&s,100); strcpy(s,"hello"); printf(s); }
// 輸出:hello
int arr[] = {6,7,8,9,10};
int *ptr = arr;
*(ptr++) += 123; // ptr 指向 7,arr[0] 變 129
printf("%d,%d", *ptr, *(++ptr));
// *ptr=7, ++ptr 指向 8 → 輸出 7,8
// 注:原題答案 8,8 有誤,正確為 7,8
int mystrcmp(const char *s1, const char *s2) {
while (*s1 && *s1 == *s2) { s1++; s2++; }
return (*s1 == *s2) ? 0 : -1;
}
int is_palindrome(const char *s) {
if (!s) return -1;
const char *e = s + strlen(s) - 1;
while (s < e) {
if (*s++ != *e--) return 0;
}
return 1;
}
注意:原文代碼邏輯有缺陷(str-=2 易越界、空串處理缺失),以上為修正版。