C语言指针面试题
发布人:shili8
发布时间:2024-12-29 19:46
阅读次数:0
**C语言指针面试题**
### 一、什么是指针?
在 C语言中,指针是一种特殊的变量,它存储的是另一个变量或常量的内存地址。通过使用指针,可以间接地访问和操作被指向的变量。
### 二、指针的基本概念* **指针的定义**: `int *p;`,其中 `int` 是指针所指向的类型,`*p` 表示这是一个指针。
* **指针的赋值**: `p = &x;`,其中 `&x` 得到变量 `x` 的内存地址,并将其赋给指针 `p`。
* **指针的使用**: `*p =10;`,通过解引用符号 `*`,可以得到指针 `p` 所指向的变量的值。
### 三、指针运算在 C语言中,指针可以进行加法和减法运算。例如:
cint arr[5] = {1,2,3,4,5};
int *p = arr; // p 指向 arr 的第一个元素printf("%d
", *p); // 输出1// 将指针 p 移动到下标为2 的位置p +=2;
printf("%d
", *p); // 输出3### 四、指针和数组在 C语言中,数组名实际上是一个指向数组首元素的指针。例如:
cint arr[5] = {1,2,3,4,5};
printf("%d
", *arr); // 输出1### 五、指针和函数在 C语言中,函数可以返回一个指针类型的值。例如:
cint *find_max(int arr[], int size) {
int max = arr[0];
for (int i =1; i < size; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return &max;
}
int main() {
int arr[] = {1,2,3,4,5};
int *p = find_max(arr, sizeof(arr) / sizeof(arr[0]));
printf("%d
", *p); // 输出5 return0;
}
### 六、指针和内存管理在 C语言中,使用指针需要注意内存的释放。例如:
cint *malloc(int size) {
int *ptr = malloc(size);
if (ptr == NULL) {
printf("Memory allocation failed
");
return NULL;
}
return ptr;
}
int main() {
int *p = malloc(sizeof(int));
if (p != NULL) {
*p =10;
free(p); //释放内存 } else {
printf("Memory allocation failed
");
}
return0;
}
### 七、指针和多线程在 C语言中,使用指针需要注意多线程的安全性。例如:
c#include <pthread.h>
int *shared_var = NULL;
void *thread_func(void *arg) {
shared_var = malloc(sizeof(int));
if (shared_var != NULL) {
*shared_var =10;
} else {
printf("Memory allocation failed
");
}
return NULL;
}
int main() {
pthread_t thread;
pthread_create(&thread, NULL, thread_func, NULL);
pthread_join(thread, NULL);
if (shared_var != NULL) {
printf("%d
", *shared_var); // 输出10 free(shared_var);
} else {
printf("Memory allocation failed
");
}
return0;
}
### 八、指针和智能指针在 C++ 中,使用智能指针可以避免手动释放内存。例如:
cpp#include <memory>
class SmartPtr {
public:
template <typename T>
explicit SmartPtr(T *ptr) : ptr_(ptr) {}
~SmartPtr() { delete ptr_; }
T &operator*() const { return *ptr_; }
T *operator->() const { return ptr_; }
private:
T *ptr_;
};
int main() {
int *p = new int(10);
SmartPtr sp(p);
printf("%d
", *sp); // 输出10 return0;
}
### 九、指针和容器在 C++ 中,使用容器可以避免手动释放内存。例如:
cpp#include <vector>
int main() {
std::vector<int> vec = {1,2,3};
printf("%d
", vec[0]); // 输出1 return0;
}
### 十、指针和迭代器在 C++ 中,使用迭代器可以避免手动释放内存。例如:
cpp#include <vector>
int main() {
std::vector<int> vec = {1,2,3};
auto it = vec.begin();
printf("%d
", *it); // 输出1 return0;
}
### 总结在 C语言中,指针是一种特殊的变量,它存储的是另一个变量或常量的内存地址。通过使用指针,可以间接地访问和操作被指向的变量。在 C++ 中,使用智能指针、容器和迭代器可以避免手动释放内存。
### 参考* 《C语言程序设计》(第3 版)
* 《C++ Primer》(第5 版)
* 《Effective C++》(第2 版)

