一、内存与指针
**内存是以字节为单位进行编址的,内存中的每个字节都对应一个地址,通过地址才能找到每个字节。而我们常说的变量,变量的内存地址就是变量的指针。切记,指针是有类型地址常量。
**
内存的快捷方式——指针
定义指针变量的一般形式:
type * variable (指向数据类型 *指针变量名)
二、指针变量
- 重点就是区分一下下面的本质区别:
在int var中; var、&var、var 者的区别?
var——指针变量
&var——对指针变量取地址
*var——取指针变量地址所指向地址的内容 - 给个例子:输入两个整数,存储在变量a和b中,当a小于b时,使用指针交换a和b并输出。
这时大脑要有逻辑思想(以图形的形式吧):
三、指针的运算
指针运算的本质是指针中存储的地址的运算。
- eg:p+n、p-n、p++、p--、++p和--p等,其中n是整数。
解释:将指针p加上或者减去一个整数n,表示p向地址增加或减小的方向移动n个元素单元,从而得到一个新的地址,使能访问新地址中的数据。每个数据单元的字节数取决于指针的数据类型。
#include<stdio.h>
int main(void)
{
char p = (char)0x1234; //十六进制的地址
printf("%x\n",p);
printf("%x\n",p+2);
printf("%x\n",p+4);
return 0;
}
四、指针的一些基础小结
- 指针变量的初始化问题小结:
指针变量在使用前必须要初始化,把一个具体的地址赋给它,否则引用时会有副作用,如果不指向任何数据就赋“空值”NULL。 - 变量与指针变量:
变量的实质是代表“内存中的某个存储单元”。指针变量是用来存储地址,而一般变量是存储数值的。指针变量可指向任何一种数据类型,但不管它指向的数据占用了多少字节,一个指针变量占用4个字节。 - 数组名与指针变量:
数组名是一个常量,不允许重新赋值。
指针变量是一个变量,可以重新赋值。
网友评论
void *p1=NULL;
void *p2=NULL;
p1 = &p2;
p2 = &p1;
p=(void *) (&p);