编辑这个页面须要登录或更高权限!
在本教程中,您将学习指针。什么是指针,如何使用它们以及在示例的帮助下使用它们时可能遇到的常见错误。
指针是 C和C ++ 编程的强大功能。在学习指针之前,让我们学习一下C语言编程中的地址。
如果程序中有变量var,则&var将在内存中提供其地址。
使用scanf()函数时,我们已多次使用地址。
scanf("%d", &var);
在此,用户输入的值存储在var变量的地址中。让我们举一个可行的实例。
#include <stdio.h> int main() { int var = 5; printf("var: %d\n", var); // 注意在var之前使用& printf("address of var: %p", &var); return 0; }
输出结果
var: 5 var地址: 2686778
注意:运行上面的代码时,您可能会获得其他地址。
指针(指针变量)是用于存储地址而非值的特殊变量。
这是我们如何声明指针的方法。
int* p;
在这里,我们已经声明了一个int类型的指针p。
您也可以通过以下方式声明指针。
int *p1; int * p2;
让我们再举一个声明指针的实例。
int* p1, p2;
在这里,我们声明了一个指针p1和一个普通变量p2。
让我们举个实例。
int* pc, c; c = 5; pc = &c;
在此,将5分配给c变量。并且,将c的地址分配给pc指针。
为了获得指针所指向的内容的值,我们使用了解引用运算符(*)。例如:
int* pc, c; c = 5; pc = &c; printf("%d", *pc); // 输出: 5
此处,c的地址已分配给pc指针。为了获取存储在该地址中的值,我们使用了*pc。
让我们举个实例。
int* pc, c; c = 5; pc = &c; c = 1; printf("%d", c); // 输出: 1 printf("%d", *pc); // 输出: 1
我们已经将c地址分配给了pc指针。
然后,我们将的值更改c为1。由于pc和的地址c相同,因此*pc得到1。
让我们再举一个实例。
int* pc, c; c = 5; pc = &c; *pc = 1; printf("%d", *pc); // 输出: 1 printf("%d", c); // 输出: 1
我们已经将c地址分配给了pc指针。
然后,我们使用* pc = 1;将* pc更改为1。 由于pc和c的地址相同,因此c等于1。
让我们再举一个实例。
int* pc, c, d; c = 5; d = -15; pc = &c; printf("%d", *pc); // 输出: 5 pc = &d; printf("%d", *pc); // 输出: -15
最初,使用的地址c分配给pc指针pc = &c;。因为c是5,所以*pc给我们5。
然后,使用将地址d分配给pc指针pc = &d;。由于d是-15,所以*pc给我们-15。
让我们举一个可行的实例。
#include <stdio.h> int main() { int* pc, c; c = 22; printf("c的地址: %p\n", &c); printf("c的值: %d\n\n", c); // 22 pc = &c; printf("指针pc地址: %p\n", pc); printf("指针pc内容: %d\n\n", *pc); // 22 c = 11; printf("指针pc地址: %p\n", pc); printf("指针pc内容: %d\n\n", *pc); // 11 *pc = 2; printf("c的地址: %p\n", &c); printf("c的值: %d\n\n", c); // 2 return 0; }
输出结果
c的地址: 003FFBF8 c的值: 22 指针pc地址: 003FFBF8 指针pc内容: 22 指针pc地址: 003FFBF8 指针pc内容: 11 c的地址: 003FFBF8 c的值: 2
该程序的用法
int* pc, c;
这里创建了一个指针pc和一个普通变量c,都是int类型。由于pc和c没有初始化在最初,指针pc指向没有地址或一个随机地址。变量c有一个地址,但包含随机的垃圾值。
c = 22;
这是给变量c赋值22,也就是说,22被存储在变量c的内存中。
pc = &c;
这将变量c的地址分配给指针pc。
c = 11;
这将11分配给变量c。
*pc = 2;
这会将指针pc指向的内存位置的值更改为2。
假设您希望指针pc指向c的地址。 然后,
int c, *pc; //pc是地址,但c不是 pc = c; // Error //&c是地址,但* pc不是 *pc = &c; // Error //&c和pc都是地址 pc = &c; //c和*pc值 *pc = c;
这是指针语法初学者经常会感到困惑的示例。
#include <stdio.h> int main() { int c = 5; int *p = &c; printf("%d", *p); // 5 return 0; }
使用时为什么没有出现错误int *p = &c;?
这是因为
int *p = &c;
相当于
int *p: p = &c;
在这两种情况下,我们都创建了一个指针p(不是*p)并给它赋值&c。
为了避免这种混乱,我们可以使用如下语句:
int* p = &c;
现在您知道了什么是指针,您将在下一个教程中学习指针与数组的关系。