c语言-指针笔记01
Posted acrifhy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言-指针笔记01相关的知识,希望对你有一定的参考价值。
c语言-指针笔记01
C中的地址
如果程序中有变量var,则&var将在内存中提供其地址。
在使用scanf()函数时,我们已多次使用地址。
scanf("%d", &var);
这里用户输入的值存储在var变量的地址中。 让我们举一个可行的例子。
#include <stdio.h>
int main()
int var = 5;
printf("var: %d\\n", var);
// Notice the use of & before var
printf("address of var: %p", &var);
return 0;
输出:
var: 5
address of var: 2686778
注意:运行上面的代码时,您可能会获得其他地址(根据计算机的不同)。
C指针
指针(指针变量)是用于存储地址而不是值的特殊变量。
指针语法
声明指针的方法:
int* p;
在这里,我们声明了一个int类型的指针p。
您也可以通过以下方式声明指针:
int *p1;
int * p2;
让我们再举一个声明指针的例子:
int* p1, p2;
在这里,我们声明了一个指针p1和一个普通变量p2。
给指针分配地址
让我们举个例子:
int* pc, c;
c = 5;
pc = &c;
这里将5分配给int变量c。 并将c的地址分配给指针pc。
获取指针指向的变量的值:
使用*运算符。 例如:
int* pc, c;
c = 5;
pc = &c;
printf("%d", *pc); // Output: 5
在这里我们使用了* pc获取了c的值。
注意:在上面的示例中,pc是一个指针,而不是* pc。 您不能也不应做类似* pc =&c;的操作。
顺便说一句,*被称为取消引用运算符(使用指针时)。 它对指针进行操作,并给出存储在该指针中的值。
改变指针指向的值
让我们举个例子:
int* pc, c;
c = 5;
pc = &c;
c = 1;
printf("%d", c); // Output: 1
printf("%d", *pc); // Ouptut: 1
我们已经将c的地址分配给了pc指针。
然后,将c的值更改为1。由于pc和c的地址相同,因此* pc返回1。
让我们再举一个例子:
int* pc, c;
c = 5;
pc = &c;
*pc = 1;
printf("%d", *pc); // Ouptut: 1
printf("%d", c); // Output: 1
我们已经将c的地址分配给了pc指针。
然后,我们使用* pc = 1;将* pc更改为1。 由于pc和c的地址相同,因此c等于1。
让我们再举一个例子:
int* pc, c, d;
c = 5;
d = -15;
pc = &c; printf("%d", *pc); // Output: 5
pc = &d; printf("%d", *pc); // Ouptut: -15
最初,使用pc =&c;将c的地址分配给pc指针。 由于c为5,* pc返回5。
然后,使用pc =&d;将d的地址分配给pc指针。 由于d为-15,因此* pc返回-15。
让我们来举一个例子看看指针是怎么工作的:
#include <stdio.h>
int main()
int* pc, c;
c = 22;
printf("Address of c: %p\\n", &c);
printf("Value of c: %d\\n\\n", c); // 22
pc = &c;
printf("Address of pointer pc: %p\\n", pc);
printf("Content of pointer pc: %d\\n\\n", *pc); // 22
c = 11;
printf("Address of pointer pc: %p\\n", pc);
printf("Content of pointer pc: %d\\n\\n", *pc); // 11
*pc = 2;
printf("Address of c: %p\\n", &c);
printf("Value of c: %d\\n\\n", c); // 2
return 0;
输出:
Address of c: 0061FEC8
Value of c: 22
Address of pointer pc: 0061FEC8
Content of pointer pc: 22
Address of pointer pc: 0061FEC8
Content of pointer pc: 11
Address of c: 0061FEC8
Value of c: 2
程序说明:
int* pc, c;
在这里,创建了一个指针pc和一个类型为int的普通变量c。
由于pc和c最初并未初始化,因此指针pc指向无地址或随机地址。 并且,变量c有一个地址,但包含随机垃圾值。
c = 22;
这里将22分配给变量c。 也就是说,将22存储在变量c的存储位置中。
pc = &c;
这里将变量c的地址分配给指针pc。
c = 11;
这里将11分配给变量c。
*pc = 2;
这会将指针pc指向的内存位置的值更改为2。
使用指针时的常见错误
假如您希望指针pc指向c的地址。 然后,
int c, *pc;
// pc is address but c is not
pc = c; // Error
// &c is address but *pc is not
*pc = &c; // Error
// both &c and pc are addresses
pc = &c;
// both c and *pc values
*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;
文章来自公众号:内卡巴拉之树
欢迎关注
以上是关于c语言-指针笔记01的主要内容,如果未能解决你的问题,请参考以下文章