C语言指针
1. 理解指针变量的定义及引用
指针变量的定义:
指针变量是一种存储内存地址的变量。在C语言中,指针变量通过符号来声明。例如,int ptr;表示ptr是一个指向int类型数据的指针。
指针变量的引用:
使用指针变量时,可以通过运算符来访问指针所指向的内存地址中的数据。例如,ptr = 10;表示将整数10存储在ptr所指向的内存地址中。
示例代码:
#include <stdio.h>
int main() {
int a = 5;
int *ptr; // 定义指针变量ptr,指向int类型
ptr = &a; // 将变量a的地址赋值给指针ptr
printf("a的值: %d\n", a);
printf("ptr所指向的值: %d\n", *ptr); // 访问指针ptr所指向的值
printf("ptr的地址: %p\n", (void *)ptr); // 输出指针ptr的地址
printf("a的地址: %p\n", (void *)&a); // 输出变量a的地址
// 修改指针所指向的值
*ptr = 10;
printf("修改后a的值: %d\n", a);
return 0;
}
注释解析:
int a = 5;:定义了一个整型变量a并初始化为5。
int ptr;:定义了一个指向整型的指针变量ptr。
ptr = &a;:将变量a的地址赋值给指针ptr。
printf(“a的值: %d\n”, a);:打印变量a的值。
printf(“ptr所指向的值: %d\n”, ptr);:通过指针ptr访问并打印其所指向的值。
printf(“ptr的地址: %p\n”, (void )ptr);:打印指针ptr自身的地址。
printf(“a的地址: %p\n”, (void )&a);:打印变量a的地址。
*ptr = 10;:通过指针ptr修改其所指向的值,即修改了变量a的值。
2. 掌握指向数组的指针变量
指向数组的指针变量:
数组名本身就是一个指向数组首元素的指针。因此,可以定义一个指针变量来指向数组的首元素,从而操作数组。
示例代码:
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int *ptr = arr; // 指向数组首元素
// 使用指针遍历数组
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, *(ptr + i)); // 使用指针访问数组元素
}
// 修改数组元素
for (int i = 0; i < 5; i++) {
*(ptr + i) += 10; // 每个元素加10
}
// 再次遍历数组
printf("修改后的数组:\n");
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
注释解析:
int arr[] = {1, 2, 3, 4, 5};:定义了一个整型数组arr并初始化为{1, 2, 3, 4, 5}。
int ptr = arr;:定义一个指向整型的指针变量ptr,并将其初始化为指向数组arr的首元素。
for (int i = 0; i < 5; i++) { printf(“arr[%d] = %d\n”, i, (ptr + i)); }:使用指针ptr遍历数组并打印每个元素的值。(ptr + i)表示访问指针ptr指向的数组的第i个元素。
for (int i = 0; i < 5; i++) { (ptr + i) += 10; }:通过指针ptr修改数组的每个元素,使其值增加10。
再次遍历数组并打印修改后的值。
示例二:
#include <stdio.h>
int main() {
int a = 10; // 声明一个整型变量a并初始化为10
int *p; // 声明一个整型指针变量p
p = &a; // 将变量a的地址赋值给指针p
printf("变量a的值: %d\n", a); // 输出变量a的值
printf("变量a的地址: %p\n", (void*)&a); // 输出变量a的地址
printf("指针p存储的地址: %p\n", (void*)p); // 输出指针p存储的地址
printf("指针p指向的值: %d\n", *p); // 输出指针p指向的值,即变量a的值
// 通过指针修改变量a的值
*p = 20;
printf("修改后变量a的值: %d\n", a); // 输出修改后的变量a的值
return 0;
}
- 指针的基本定义和使用
在这个例子中,我们定义了一个整型变量a和一个指向整型的指针p。我们将a的地址赋给p,然后通过p来访问a的值。 - 指针与数组
指针的指针
#include <stdio.h>
int main() {
int num = 10;
int *ptr = # // 指针ptr指向num
int **pptr = &ptr; // 指针的指针pptr指向ptr
printf("num的值: %d\n", num);
printf("ptr的值(即num的地址): %p\n", ptr);
printf("pptr的值(即ptr的地址): %p\n", pptr);
printf("pptr指向的指针的值(即num的地址): %p\n", *pptr);
printf("pptr指向的指针指向的变量的值: %d\n", **pptr);
return 0;
}