int a = 3;
int* p = &a;
一句话:变量名即地址!
a所在地址 存储的是 数字3
p所在的地址 存储的是 a的地址 也就是p的值为a的地址
*p解地址,p为a的地址 所以*p就是a的值 故*p=3。
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。
指针变量存放的是内存地址,那为什么指针还要定义类型? - 知乎 https://www.zhihu.com/question/29622405
指针就是一个存放地址的变量
当指针指向某个变量
这时这个指针里就存放了那个变量的地址
同时可以利用指针直接取变量中的值用 只要在指针前加 * 就是取其
真值了(也就是被指向的变量的值)
举个例子
int i=0,*p;
声明了一个 int 类型的 变量i和指针p
假设i在内存中所存在的地址为aaaaa(随便写的)
p->i 就是使指针p指向i
也就是说 指针p中存放了aaaaa这个地址
当你操作这个p时就是直接操作了aaaaa这个地址中存放的东西
间接操作了变量i,
这就是指针的作用
C语言中指针变量是存在哪里的?
比如
我们的全局和静态变量放在全局区,生命周期是整个程序运行期间
我们的局部变量是放在栈区,模块执行结束后退栈
我们程序员自己开的内存是放在堆区,用完自己free
那指针算什么?是放在哪里的?
比如我
int *a;
a =(int*) malloc(10*sizeof(int));
这个a指向的内存是在堆上
但是a指针本身的4个字节是放在哪里的?
我们的全局和静态变量放在全局区,生命周期是整个程序运行期间
我们的局部变量是放在栈区,模块执行结束后退栈
我们程序员自己开的内存是放在堆区,用完自己free
那指针算什么?是放在哪里的?
比如我
int *a;
a =(int*) malloc(10*sizeof(int));
这个a指向的内存是在堆上
但是a指针本身的4个字节是放在哪里的?
1、指针变量和普通的变量一样,编译期储存在代码当中,运行期间储存在内存里。c语言的变量值是通过该变量的内存地址寻址得到的,而对于一个已经编译好的程序,变量的地址都是确定的值,不可以更改。这是因为程序在编译时编译器已经通过语法分析把指针变量的地址值计算出来了,所以指针变量实际上不用保存在内存堆栈或数据段中,而是包含在汇编代码里面。
2、指针变量里面就是整型的一个十六进制数,用来表示的就是指向某个变量的地址;
指针是C语言中广泛使用的一种数据类型;
利用指针变量可以表示各种数据结构;
能很方便地使用数组和字符串;
并能象汇编语言一样处理内存地址,从而编出精练而高效的程序;
指针极大地丰富了编程语言的功能。