📜  C |指针基础问题16(1)

📅  最后修改于: 2023-12-03 14:59:38.449000             🧑  作者: Mango

C指针基础问题16

本篇文章主要介绍C语言中指针的基础问题16,包括指针运算、指针指向数组以及指针的类型转换等。

指针运算

指针变量可以进行加、减运算,指针之间也可以进行加、减运算,其运算规则如下:

  1. 如果 p 是指向类型 T 的指针,那么 p + 1 将指向 p 所指向的类型大小为 T 的下一个元素地址。
  2. 如果 p 是指向类型 T 的指针,那么 p - 1 将指向 p 所指向的类型大小为 T 的上一个元素地址。
  3. 两个指针相减的结果为它们所指向的元素之间的距离,即两个指针之间相差几个元素。
指针指向数组

指针可以指向数组,对指针的操作就相当于对数组的操作。下面是一个指针指向数组的例子:

int a[] = {1, 2, 3, 4, 5};
int *p = a;

其中,指针变量 p 指向了数组 a 的第一个元素。我们可以通过指针来访问数组中的元素:

printf("%d\n", *p); //输出1
p++;
printf("%d\n", *p); //输出2
指针的类型转换

指针也可以发生强制类型转换。当一个指针类型被转换为另一个指针类型时,必须确保新的类型和原来的类型有足够的相似性,否则可能产生不可预测的结果。

下面是一个指针类型转换的例子:

char c = 'A';
int *p = (int *)&c;
printf("%d\n", *p); //输出1313836192

上面的例子中,将 char 类型的变量 c 的地址强制转换为 int 类型的指针后,再通过指针访问 c 的值。由于 char 类型的变量只占用一个字节,而 int 类型的指针占用四个字节,因此输出的结果看起来很奇怪。这个例子告诉我们在进行指针类型转换时要格外小心。