📅  最后修改于: 2023-12-03 14:59:38.449000             🧑  作者: Mango
本篇文章主要介绍C语言中指针的基础问题16,包括指针运算、指针指向数组以及指针的类型转换等。
指针变量可以进行加、减运算,指针之间也可以进行加、减运算,其运算规则如下:
p
是指向类型 T
的指针,那么 p + 1
将指向 p
所指向的类型大小为 T
的下一个元素地址。p
是指向类型 T
的指针,那么 p - 1
将指向 p
所指向的类型大小为 T
的上一个元素地址。指针可以指向数组,对指针的操作就相当于对数组的操作。下面是一个指针指向数组的例子:
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 类型的指针占用四个字节,因此输出的结果看起来很奇怪。这个例子告诉我们在进行指针类型转换时要格外小心。