1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| #include <stdio.h> #include <stdint.h>
void demonstrate_pointer_basics(void) { printf("=== 指针基础概念演示 ===\n"); int num = 42; float pi = 3.14159f; char letter = 'A'; int* int_ptr = # float* float_ptr = π char* char_ptr = &letter; printf("变量值和地址:\n"); printf("num = %d, 地址: %p\n", num, (void*)&num); printf("pi = %.5f, 地址: %p\n", pi, (void*)&pi); printf("letter = '%c', 地址: %p\n", letter, (void*)&letter); printf("\n指针变量:\n"); printf("int_ptr = %p, 指向的值: %d\n", (void*)int_ptr, *int_ptr); printf("float_ptr = %p, 指向的值: %.5f\n", (void*)float_ptr, *float_ptr); printf("char_ptr = %p, 指向的值: '%c'\n", (void*)char_ptr, *char_ptr); printf("\n指针变量自身的地址:\n"); printf("&int_ptr = %p\n", (void*)&int_ptr); printf("&float_ptr = %p\n", (void*)&float_ptr); printf("&char_ptr = %p\n", (void*)&char_ptr); printf("\n指针大小:\n"); printf("sizeof(int*) = %zu 字节\n", sizeof(int*)); printf("sizeof(float*) = %zu 字节\n", sizeof(float*)); printf("sizeof(char*) = %zu 字节\n", sizeof(char*)); printf("sizeof(void*) = %zu 字节\n", sizeof(void*)); printf("\n地址运算:\n"); printf("int_ptr + 1 = %p (偏移 %zu 字节)\n", (void*)(int_ptr + 1), sizeof(int)); printf("float_ptr + 1 = %p (偏移 %zu 字节)\n", (void*)(float_ptr + 1), sizeof(float)); printf("char_ptr + 1 = %p (偏移 %zu 字节)\n", (void*)(char_ptr + 1), sizeof(char)); }
void demonstrate_pointer_arithmetic(void) { printf("\n=== 指针运算详解 ===\n"); int array[5] = {10, 20, 30, 40, 50}; int* ptr = array; printf("数组内容: "); for (int i = 0; i < 5; i++) { printf("%d ", array[i]); } printf("\n"); printf("\n指针遍历数组:\n"); for (int i = 0; i < 5; i++) { printf("ptr + %d: 地址=%p, 值=%d\n", i, (void*)(ptr + i), *(ptr + i)); } printf("\n指针递增演示:\n"); int* moving_ptr = array; for (int i = 0; i < 5; i++) { printf("moving_ptr: 地址=%p, 值=%d\n", (void*)moving_ptr, *moving_ptr); moving_ptr++; } printf("\n指针相减:\n"); int* start = &array[0]; int* end = &array[4]; ptrdiff_t diff = end - start; printf("end - start = %td (元素个数)\n", diff); printf("实际字节差: %td 字节\n", (char*)end - (char*)start); }
int main(void) { demonstrate_pointer_basics(); demonstrate_pointer_arithmetic(); return 0; }
|