思路:將數字拆解為數組(低位在前),雙指針首尾比較。
#include <stdio.h>
int is_palindrome(int n) {
if (n < 0) return 0;
int digits[12], len = 0;
int temp = n;
do { digits[len++] = temp % 10; temp /= 10; } while (temp);
for (int i = 0, j = len-1; i < j; ++i, --j)
if (digits[i] != digits[j]) return 0;
return 1;
}
int main() {
int n; printf("Input: "); scanf("%d", &n);
printf("%d %s palindrome\n", n, is_palindrome(n) ? "is" : "is not");
return 0;
}
#include <stdio.h>
void pointer_sort_desc(int *arr, int n) {
for (int *p = arr; p < arr + n - 1; ++p) {
int *max_ptr = p;
for (int *q = p + 1; q < arr + n; ++q)
if (*q > *max_ptr) max_ptr = q;
if (max_ptr != p) {
int tmp = *p; *p = *max_ptr; *max_ptr = tmp;
}
}
}
int main() {
int a[8];
printf("Input 8 ints: ");
for (int i=0; i<8; i++) scanf("%d", &a[i]);
pointer_sort_desc(a, 8);
for (int i=0; i<8; i++) printf("%d ", a[i]);
return 0;
}
| 表達式 | 含義 |
|---|---|
int *p | p是指向int的指針(地址) |
*p | 解引用:p指向的int值 |
p = &a | p存儲變量a的地址 |
p = arr | 數組名退化為首元素地址 |
*(p+i) | 等價於 p[i] / arr[i] |
p++ | 指針移動 sizeof(*p) 字節 |
\0結尾的char數組,char*指向首字符。const char*指向不可修改的內容;char* const指針本身不可修改。*p = *q 是值拷貝;p = q 是地址拷貝,兩者語義完全不同。