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",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\n", num, p); printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d\n", p, *p); *p = 100; printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d\n", p, num); return 0; }通过上面的程序和运行结果来看,指针所指的地址是不会改变的,但是可以通过操作符(解引用操作符),来返回指针p所指的对象,我们通过对p的赋值,改变了p指向的地址上的值,从而n的值发生改变