1. 什么是指针
指针是C语言中最强大的特性之一,也是初学者常常感到困难的部分。指针本质上是一个变量,存储的是另一个变量的内存地址。
指针的定义:通过*符号定义一个指针,指针变量的类型表明它指向的变量类型。
代码语言:javascript复制int *ptr;
上面例子中,ptr是一个指向int类型变量的指针。
指针与普通变量的区别:普通变量直接存储数据值,而指针存储的是一个地址。
2. 指针的基本操作
指针的操作包括获取地址(取地址操作)、访问指针所指向的值(解引用操作),以及对指针变量进行运算。
取地址操作:通过&符号可以获取变量的地址,将该地址赋值给指针变量。
代码语言:javascript复制int a = 10;
int *ptr = &a;
解引用操作:通过*符号可以访问指针所指向的变量的值。
代码语言:javascript复制printf("%d", *ptr); // 输出10
指针运算:指针可以进行算术运算,比如加法、减法,这些运算是基于指针所指向数据类型的字节大小。
代码语言:javascript复制int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
ptr ; // 指针指向下一个数组元素
3. 指针与数组
指针与数组密切相关。C语言中的数组名实际上是一个指针,指向数组的第一个元素的地址。理解这一点能够帮助更好地操作数组。
数组名是指针:数组名本质上是一个常量指针,指向数组的首元素。
代码语言:javascript复制int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
printf("%d", *ptr); // 输出1
指针与数组索引的等价性:使用指针可以像数组索引一样操作数组。
代码语言:javascript复制printf("%d", *(arr 2)); // 输出3,等价于arr[2]
多维数组与指针:二维数组中的元素可以通过双重指针(pointer to pointer)来访问。
代码语言:javascript复制int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
int (*ptr)[3] = arr;
4. 指针与字符串
C语言中的字符串实际上是一个字符数组,指向字符串第一个字符的指针可以操作整个字符串。
字符串作为指针:字符串字面值是以’ ’结尾的字符数组,指针可以指向该数组。
代码语言:javascript复制char *str = "Hello, World!";
字符串操作:通过指针可以轻松遍历和操作字符串。
代码语言:javascript复制while (*str != '