C语言学习笔记 指针概述

来源:互联网 发布:自适应滤波器 编程 编辑:程序博客网 时间:2024/06/09 23:10

指针指向的是内存资源,每个内存空间都对应着一个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进行内存的读取。


0 0
原创粉丝点击