经典指针笔试题你会了嘛
发布人:shili8
发布时间:2024-12-26 09:39
阅读次数:0
**经典指针笔试题**
作为一名程序员,掌握指针的基本概念和运用是非常重要的。以下是一些经典的指针笔试题,希望能够帮助你加深对指针的理解。
###1. 指针的定义和初始化**问题:**
请写出一个使用指针的例子,展示如何定义和初始化一个指针。
**答案:**
c#include <stdio.h> int main() { int a =10; int *p; // 定义一个整型指针 p = &a; // 初始化指针,指向变量a的地址 printf("a 的值是:%d ", a); printf("p 的值是:%p ", p); // %p 是用于打印指针的格式符 printf("*p 的值是:%d ", *p); // *p 表示通过指针p获取变量a的值 return0; }
**注释:**
* `int a =10;` 定义一个整型变量 `a`,并赋予它初始值 `10`。
* `int *p;` 定义一个整型指针 `p`,用于存储变量 `a` 的地址。
* `p = &a;` 初始化指针 `p`,使其指向变量 `a` 的地址。
* `printf("a 的值是:%d
", a);` 打印变量 `a` 的值。
* `printf("p 的值是:%p
", p);` 打印指针 `p` 的值,使用 `%p` 格式符来表示其为一个地址。
* `printf("*p 的值是:%d
", *p);`通过指针 `p` 获取变量 `a` 的值,并打印出来。
###2. 指针的运算**问题:**
请写出一个使用指针的例子,展示如何进行指针的加法和减法运算。
**答案:**
c#include <stdio.h> int main() { int a =10; int *p; // 定义一个整型指针 p = &a; // 初始化指针,指向变量a的地址 printf("a 的值是:%d ", a); printf("p 的值是:%p ", p); // %p 是用于打印指针的格式符 int *q = p +1; // 将指针p加一,得到新指针q printf("*q 的值是:%d ", *q); //通过指针q获取变量a+1的值 int *r = p -2; // 将指针p减两,得到新指针r printf("*r 的值是:%d ", *r); //通过指针r获取变量a-2的值 return0; }
**注释:**
* `int *q = p +1;` 将指针 `p` 加一,得到新指针 `q`,其指向变量 `a+1` 的地址。
* `printf("*q 的值是:%d
", *q);`通过指针 `q` 获取变量 `a+1` 的值,并打印出来。
* `int *r = p -2;` 将指针 `p` 减两,得到新指针 `r`,其指向变量 `a-2` 的地址。
* `printf("*r 的值是:%d
", *r);`通过指针 `r` 获取变量 `a-2` 的值,并打印出来。
###3. 指针的比较**问题:**
请写出一个使用指针的例子,展示如何进行指针的比较运算。
**答案:**
c#include <stdio.h> int main() { int a =10; int b =20; int *p; // 定义一个整型指针 p = &a; // 初始化指针,指向变量a的地址 printf("a 的值是:%d ", a); printf("b 的值是:%d ", b); if (p > &b) { // 比较指针p和指针&b printf("p 大于 &b "); } else { printf("p 小于或等于 &b "); } return0; }
**注释:**
* `if (p > &b)` 比较指针 `p` 和指针 `&b`,如果 `p` 大于 `&b` 则执行 `printf("p 大于 &b
");`。
* `else` 如果 `p` 小于或等于 `&b` 则执行 `printf("p 小于或等于 &b
");`。
###4. 指针的数组**问题:**
请写出一个使用指针的例子,展示如何定义和初始化一个指向数组的指针。
**答案:**
c#include <stdio.h> int main() { int arr[5] = {1,2,3,4,5}; // 定义一个整型数组arr int *p; // 定义一个整型指针 p = arr; // 初始化指针,指向数组arr的首元素 printf("arr 的值是:%d %d %d %d %d ", arr[0], arr[1], arr[2], arr[3], arr[4]); for (int i =0; i < 5; i++) { // 遍历数组 printf("*p 的值是:%d ", *p); //通过指针p获取数组元素的值 p++; // 将指针p加一,指向下一个数组元素 } return0; }
**注释:**
* `int arr[5] = {1,2,3,4,5};` 定义一个整型数组 `arr`,其包含五个元素。
* `int *p;` 定义一个整型指针 `p`,用于存储数组 `arr` 的首元素的地址。
* `p = arr;` 初始化指针 `p`,使其指向数组 `arr` 的首元素的地址。
* `printf("arr 的值是:%d %d %d %d %d
", arr[0], arr[1], arr[2], arr[3], arr[4]);` 打印数组 `arr` 的所有元素。
* `for (int i =0; i < 5; i++) {` 遍历数组 `arr`,使用 `i` 索引访问每个元素。
* `printf("*p 的值是:%d
", *p);`通过指针 `p` 获取当前元素的值,并打印出来。
* `p++;` 将指针 `p` 加一,指向下一个数组元素。
###5. 指针的函数**问题:**
请写出一个使用指针的例子,展示如何定义和调用一个函数,其参数类型为指针。
**答案:**
c#include <stdio.h> void swap(int *a, int *b) { // 定义一个交换函数 int temp = *a; // 将*a赋值给临时变量temp *a = *b; // 将*b赋值给*a *b = temp; // 将temp赋值给*b} int main() { int a =10; int b =20; printf("a 的值是:%d ", a); printf("b 的值是:%d ", b); swap(&a, &b); // 调用swap函数,交换a和b的值 printf("a 的值是:%d ", a); printf("b 的值是:%d ", b); return0; }
**注释:**
* `void swap(int *a, int *b)` 定义一个函数 `swap`,其参数类型为指针 `int *a` 和 `int *b`。
* `int temp = *a;` 将 `*a` 赋值给临时变量 `temp`。
* `*a = *b;` 将 `*b` 赋值给 `*a`。
* `*b = temp;` 将 `temp` 赋值给 `*b`。
* `swap(&a, &b);` 调用函数 `swap`,将 `&a` 和 `&b`传递给函数作为参数。
###6. 指针的结构体**问题:**
请写出一个使用指针的例子,展示