👨 Biaoge ⏰于2024-03-08 00:09发布 👓阅读量:15402🏷️文章类型:【 C语言程序设计 】
C语言程序设计——指针详解
一、指针的引入
指针是C语言中的一个重要概念,它允许我们直接访问内存地址,并通过这些地址操作存储在内存中的数据。指针为程序员提供了一种更直接、更灵活的方式来管理和操作内存。
二、指针的定义
指针是一个变量,其存储的是另一个变量的地址。指针变量的类型必须与它所指向的变量的类型相匹配。
int var = 10; // 一个整型变量 int *ptr = &var; // 一个指向整型的指针变量,存储var的地址
在上面的代码中,ptr是一个指针变量,它的类型是int *,表示它指向一个整型变量。&var是取地址运算符,它返回变量var在内存中的地址。
三、地址运算符&
地址运算符&用于获取变量的内存地址。
#include <stdio.h> int main() { int num = 20; int *p = # // p指向num的地址 printf("Address of num: %p ", (void *)&num); // 打印num的地址 printf("Value of p: %p ", (void *)p); // 打印p中存储的地址,应该与num的地址相同 return 0; }
运行这个程序,你会看到num的地址和p中存储的地址是相同的。
四、间址运算符*
间址运算符*用于通过指针访问它所指向的值。当*用于定义指针变量时,它表示该变量是一个指针;当*用于指针变量前时,它表示取该指针指向的值。
#include <stdio.h> int main() { int num = 20; int *p = # // p指向num的地址 printf("Value of num: %d ", num); // 直接访问num的值 printf("Value pointed by p: %d ", *p); // 通过p访问num的值 return 0; }
在这个程序中,*p表示取p指向的值,即num的值。因此,printf语句会输出相同的值。
五、指针与数组
指针在数组操作中特别有用,因为数组名其实就是数组首元素的地址。
#include <stdio.h> int main() { int arr[] = {1, 2, 3, 4, 5}; int *p = arr; // p指向数组首元素的地址 for (int i = 0; i < 5; i++) { printf("%d ", *(p + i)); // 通过指针运算访问数组元素 } return 0; }
这个程序定义了一个整型数组arr,并将指针p初始化为指向数组的首元素。然后,通过一个循环和指针运算,我们可以访问数组的每个元素。
六、小试题
1. 填空题
请补全以下代码,定义一个指向整型的指针ptr,并将其初始化为指向变量x的地址。
int x = 10; int ____ ptr = &x;
2. 选择题
以下哪个选项正确地描述了*ptr的含义?
A. ptr所指向的值
B. ptr的地址
C. ptr的类型
D. ptr的大小
3. 编程题
编写一个C语言程序,定义一个整型数组和一个指向该数组的指针。使用指针访问并打印数组的所有元素。