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进行内存的读取。
指针:指针变量,用于存放指针。在通常情况下,人们定义指针的名称都是以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的数据
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进行内存的读取。
相关文章推荐
- C++基本概念——const与基本类型和类、const与指针、const与引用
- POJ 2777指针
- Visual C++内存泄露检测—VLD工具使用说明
- C++ Rule of Three
- C++ 小程序
- C++编程小讲堂 第一章
- C++ 智能指针详解
- C++ 编程小讲堂 第二章
- C++ enum
- C++之pair与make_pair
- C/C++中constkeyword
- C++优先队列 合并果子
- HDU1712 分组背包
- POJ2349 (prim)
- 今天在学习C语言循环时遇到的问题
- 最短路径(floyd算法)
- Treap平衡树
- HUD1754 (完全二叉树)
- C语言最小生成树prim算法(USACO3.1)
- C语言小结之链表