关于指针与取地址符

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;
}

C语言中指针与取地址符&详解-风君雪科技博客
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;
}

C语言中指针与取地址符&详解-风君雪科技博客
通过上面的程序和运行结果来看,指针所指的地址是不会改变的,但是可以通过操作符(解引用操作符),来返回指针p所指的对象,我们通过对p的赋值,改变了p指向的地址上的值,从而n的值发生改变