前言
该系列记录了博主认为在C语言学习和掌握过程中较为困难的知识点,并供读者学习和参考。
题目 1: 基础指针概念
#include <stdio.h>
int main() {
int var = 10;
int *ptr = &var; // 声明一个指针并初始化为var的地址
printf("Value of var = %d\n", var);
printf("Address of var = %p\n", (void*)&var);
printf("Value of ptr = %p\n", (void*)ptr);
printf("Value stored at ptr = %d\n", *ptr);
return 0;
}
答案: 该程序将输出变量var
的值、地址,指针ptr
的值(即var
的地址),以及指针指向的值。
题目 2: 指针算术
#include <stdio.h>
int main() {
int arr[] = {10, 20, 30, 40, 50};
int *ptr = arr; // 指向数组的第一个元素
printf("Value at ptr: %d\n", *ptr);
printf("Value at ptr + 2: %d\n", *(ptr + 2));
return 0;
}
答案: 该程序将输出数组第一个元素的值(10)和第三个元素的值(30)。
题目 3: 指针与函数
#include <stdio.h>
void increment(int *ptr) {
(*ptr)++; // 增加指针指向的值
}
int main() {
int num = 5;
increment(&num);
printf("%d\n", num);
return 0;
}
答案: 该程序将输出6,因为increment
函数增加了num
的值。
题目 4: 指针与数组作为参数
#include <stdio.h>
void printArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", *(arr + i));
}
printf("\n");
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
printArray(arr, size);
return 0;
}
答案: 该程序将输出数组中的所有元素:1 2 3 4 5。
题目 5: 指针与动态内存分配
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int*)malloc(sizeof(int) * 5); // 动态分配一个整数数组的空间
if (ptr != NULL) {
for (int i = 0; i < 5; i++) {
ptr[i] = i * i; // 初始化数组
}
for (int i = 0; i < 5; i++) {
printf("%d ", ptr[i]); // 打印数组
}
free(ptr); // 释放内存
}
return 0;
}
答案: 该程序将输出0 1 4 9 16,然后释放动态分配的内存。
题目 6: 指针与字符串
#include <stdio.h>
int main() {
char str[] = "Hello";
char *ptr = str;
while (*ptr != '\0') {
printf("%c", *ptr);
ptr++;
}
printf("\n");
return 0;
}
答案: 该程序将输出字符串"Hello"。
题目 7: 指针比较
#include <stdio.h>
int main() {
int a = 10;
int b = 20;
int *ptr1 = &a;
int *ptr2 = &b;
if (*ptr1 < *ptr2) {
printf("a is less than b\n");
} else {
printf("a is not less than b\n");
}
return 0;
}
答案: 该程序将输出"a is less than b",因为a
的值小于b
的值。
题目 8: 指针与结构体
#include <stdio.h>
struct Person {
char name[50];
int age;
};
int main() {
struct Person p1 = {"Alice", 30};
struct Person p2 = {"Bob", 25};
struct Person *ptr1 = &p1;
struct Person *ptr2 = &p2;
if (ptr1->age < ptr2->age) {
printf("%s is younger than %s\n", ptr1->name, ptr2->name);
} else {
printf("%s is not younger than %s\n", ptr1->name, ptr2->name);
}
return 0;
}
答案: 该程序将输出"Alice is not younger than Bob",因为p1
的年龄大于p2
的年龄。