关于指针与取地址符
1.什么是指针?
(1)首先,我们要明白什么叫做指针变量名,对于 int *p,这里的指针变量名不是 p 而是 p ,类似与 Java 中定义数组是 int [] array ,所以我习惯将 p 叫做 int * 类型
(2)通俗的来说:指针就是地址,通过这段地址就可以找到以它为地址的那个内存单元
【保存地址使用的就是指针变量,所以是用变量名p=&a,而不是p = &a(定义时除外)】
(3)指针变量必须要初始化,否则不知道指向哪个地址(就是我们常说的野指针)
(4)指针就是用来存放地址的,并且可以通过这个地址来操作对应的内容。只要知道了一个变量的内存地址,那么我们就可以通过指针来操作块内存空间
了解了这些之后,看一段代码:
#include <stdio.h>
int main()
{
int n= 7;
int *p;
p = &n; //指针初始化,也可以写作 int *p = &n;
printf("%d 的地址是 %p
",n,p);
return 0;
}
n是int类型的,而p是int *类型的,所以他们的最后得到的结果的类型完全就不一样了
int *p定 = &n,&是取地址符,得到的就是内存地址【指针保存地址,&用来取地址】
为了更好的理解,根据类型匹配:*p = n ;p = &n (= 表示等价于)
2.如何使用指针
使用指针和取地址符,解决了值传递只能通过“按值传递”这个问题,可以用指针和取地址符来操作:
继续看一段代码:
#include<stdio.h>
int main(void)
{
int n = 7;
int *p = &n;
printf("数值%d所在的地址是 %p
", num, p);
printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d
", p, *p);
*p = 100;
printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d
", p, num);
return 0;
}
通过上面的程序和运行结果来看,指针所指的地址是不会改变的,但是可以通过操作符(解引用操作符),来返回指针p所指的对象,我们通过对p的赋值,改变了p指向的地址上的值,从而n的值发生改变
最新评论