以32位系统为例,在系统中所有的存储和外设都有相应的地址对应,比如内存地址可能是开始于0x20000000,我们定义的大部分变量都是在这个地址上进行累加得到其存储地址。此时我们就可以生命一个指针,指向这个地址,就可以访问其内容了。指针可以粗略的认为是一个unsigned int类型的变量,保存的就是某一个地址,当这个地址指向某个变量时,就可以通过这个指针访问那个变量。
int iMyAge=20; //定义一个变量,赋值为20
int *pMyAge=&iMyAge;//定义一个指针,其地址指向变量iMyAge
指针就是指定的地址,可以是变量或是函数的地址。在使用时,与变量差不多,要选择定义再使用
比如
int *ab;
C语言里面的指针就是一个地址,这个地址指向的空间里面会保存需要的变量
unsigned char *a=0x8004000;
unsigned char b=*a;
这里a就是一个指针,里面保存的是0x8004000这个地址,然后*a就是a这个0x8004000地址里面保存的数据,将它赋给b
C和C++中,指针其实就是一个无符号整数,用于表示内存地址。
所以指针变量其实存储的就是无符号整数,不同的系统,或者针对不同环境编译的程序,这个地址的位宽还不同,比如32位系统上这个地址是32位的,所以相对于一个unsigned long型数据,在64位系统中则是64位的,相对于unsigned long long 数据。
不过虽然地址是无符号整数,但其运算规则,特别是++,--,+1等规则却不同于普通的无符号整数,它计算时都是根据指针所指空间数据类型来进行计算,加减的实际数量都是 sizeof( 具体数据类型 ) 为单位的。 例如 如果 sizeof( int ) = 4,则加减一次为4,如果sizeof( unsigned long )=8,则加减一次为8.
指针就是指向函数或者变量的一个地址,
int a=1;
int *p=null;
p=&a;
1定义变量a等于1
2指针p先指向空
3把a变量的内存地址赋值给p,
之后改变p地址的内容就是改变a变量
C语言中的指针就是指向一个地址的,指针本身是个数据,整型数据。这个指针本身存的是指向的那个变量的地址。
这个地址可以是变量的地址,也可以是函数的入口地址。
C语言中,指针,就是一个地址的变量,这个变量所代表的是一个地址,而地址上的数据并不是指针关心的
使用时,要使用*来定义
unsigned char *temp;
C语言中,指针指的就是一个地址,这个地址可以是一个常量,也可以是一个变量,同样也可以是一个函数的入口地址
例如 int fun(){}
int *p();
p = fun;
那么这个p就指向了函数fun()的入口处,然后直接调用p和调用fun是一个效果,都会执行同一个函数体