您的位置:首页 > 编程语言 > C语言/C++

C语言学习笔记 指针概述

2016-01-31 18:03 399 查看
指针指向的是内存资源,每个内存空间都对应着一个address,相当于一个门牌号,指针用来存放的就是“门牌号”,拿着“门牌号”就能找到与之相应的内存地址,从中就可以读取内存的内容了。

指针:指针变量,用于存放指针。在通常情况下,人们定义指针的名称都是以p为开头。

在定义指针中要考虑两种情况:指针的大小,指针指向哪里.。

(1)指针大小:

以32位系统为例,如果寻址范围为4G,则需要用一个32bit的数去描述内存地址。

1G>>>>>2^30,   4G>>>>>2^32,这样也可以看出,32位系统最大只能支持的4G内存。

int *p;  *p占32个bit ,4个字节

(2)读取地址内容:

结构类型 * p 

char *p 指向p的地址,一次性读取1b的数据

int *p     指向p的地址,一次性读取4b的数据

    
    
    
#include <stdio.h>

int main ()
{

int *p_int;
char *p_char;
printf("The p_int is %lu,the p_char is %lu\r\n",sizeof *p_int,sizeof *p_char);
return 0;

}运行以上测试程序就能看出 int 的指针 占有四个字节,char的指针占有1个字节。
注意:这里用的的“%lu”的修饰符,防止在一些编译环境中报错,用%d 也是可以的。

下面看一下如何给一个指针赋值,在定义的指针的过程中一定要保证指针所指的地址具有合法性。

#include <stdio.h>

int main ()
{
int a =0x12345678;
int *p_int;
p_int= &a;
printf("the *P-int is %x \r\n",*p_int);
return 0;

}

首先定义一个数、指针,然后用指针去指向这个数所在的地址,然后通过*p 就可以读取指针所指向内存咯空间的内容了。
#include <stdio.h>

int main ()
{
int a=0x12345678;
char *p1;
p1=&a;

printf("The a is %x,the *P1 is %x,the *p2 is %x,the *p3=%x. \r\n",a,*p1,*(p1+1),*(p1+2));
return 0;

}返回的结果是 p1=78,p2=56,p3=34.指针所指的地址其实数数据的其实地址(低地址),由低到高长度是对应的数据类型,每小段以8bit(1字节)位单位。
以我现在的编译环境中,0x12345678所存的内容 从内存空间的低到高的存储内容  应该是:78》56》34》12

在读取内存中 我本次运用的是 char类型,应该改成unsigned char进行内存的读取。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: