找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[ C语言开发 ] [守望者 C和指针] 04_指针及指针操作

2014-04-09 01:36| 发布者: watchmen | 查看: 2931 | 收藏

摘要: 本章全面剖析指针、地址、指针地址的基本概念及相互关系,同时探讨指针类似和指针指向类型的关系及指针应用操作。

04.01指针_地址_指针类型辨析


04.02指针类型全辨析


04.03指针运算操作及应用



主要目标:
1)指针是C语言中的一种基本的数据类型。指针的意义及功能,使用指针的优势。
2)期望大家完成strcpy, strlen函数的编写。用指针去修改内存空间的内容。

指针、变量、地址地址与内容。值与类型。
 
int num;
char ch;
? = ch 做为右值,ch代表的是这个空间的值(1个字节)。空间大小由类型决定。
? = num做为右值,也代表对应空间的值(4个字节)。
变量名,变量的类型。
做为左值:
ch = ‘c’; 代表的是对应的空间。
num = 10; 代表的也是这四个字节空间。
&取地址符
&ch代表的这个变量的空间起始地址:0x00080000
&num代表的这个变量的空间起始地址:0x00080004
*取内容运算符
右值时
? = *(&ch)  0x12  1个字节。
? =   *(&num)  0x78563412。4个字节。大小端问题。
左值时:
*(&ch) 代表&ch这个地址开始的空间。
*(&ch)  = ‘a’;
*(&num)= 100;
通过空间的地址是可以访问空间的。

指针就是地址,但是地址不是指针(指针有类型,地址没有类型)。
专门用一种类型的变量(一种数据类型)来存放地址值。指针。
int num;
char ch;
int* p2;
char *p1;
做为右值:空间的值。
num:0x78563412
ch:0x12
p1:0x00080000
p2: 0x00080004
做为左值:代表的空间。
ch = ‘a’;
num = 100;
//p1 = 200;
//p2 = 400;
p1 = &ch;
p2 = #
*p1:通过p1间接访问ch;
*p1:通过p2间接访问num;
 

指针与内存空间(32位平台)
指针自己的值:存储的内容,也就是一个数值,一般为另一个空间的地址。p1->0x00080000
指针指向的值:以存储的值为地址,对应空间的内容。ch
指针自己的地址:0x00090000

指针类型与指向类型指针类型:指针自己的类型:
跟平台相关。在32位平台下,始终占用4个字节空间。
int *p;char *p;double *p;             //sizeof(p)
指针指向的类型:
int *p;     //p是名字, *代表p是一个指针,int代表指向的类型。因此,*p做为右值代表是4个字节空间内容。p指向的类型为int型。
char *p;     //p是名字, *代表p是一个指针,char代表指向的类型。因此,*p做为右值代表是1个字节空间内容。p指向的类型为char型。

特殊类型指针与高级指针识别
void *p;  //p是名字,*代表它是一个指针,void是指向的类型。说明这个指针指向的数据类型不确定。
void *malloc(size_t size);
p = (int *)p1;
void  i;//(X)
指向指针的指针
int **p;//p是名字,紧挨p的这个*代表P是一个指针,余下的int *代表它指向的是一个指针。
int a = 10;
int *p1 = &a;
int **p2 = &p1;
 

  符号
左值
右值
  
a
  
意义及值:代表是是0x8000这个空间
  
示例 a = 20;
意义及值:代表空间的值。10
  
示例  b =a;
  
&a
  
意义及值:取a的地址。地址是常量。因此不能做为左值。
  
示例
意义及值:取a的地址,0x8000.
  
示例 p1 = &a;
  
p1
  
意义及值:代表是是0x9000这个空间
  
示例p1 = &a
意义及值:代表是是0x9000这个空间中的内容。0x8000
  
示例 p3 = p1;
  
&p1
  
不能做为左值。
意义及值:即p1空间的地址,0x9000。
  
示例p2 = &p1;
  
P2
  
意义及值:代表是是0xA000这个空间
  
示例 p2 = ?
意义及值:代表是是0xA000这个空间内容。0x9000
  
示例p4 = p2
  
&p2
  
不能做为左值。
意义及值:代表这个空间地址。0xA000
  
示例p5 = &p2;
  
*p1
  
意义及值:代表是p1指向的空间。即a的空间。
  
示例:*p1 = 20 à a = 20;
意义及值:代表是p1指向的空间的内容 。即a的值。
  
示例: b =  *p1-à b = a;
  
*p2
  
意义及值:代表是p2指向的空间。即p1的空间。
  
示例:*p2 = &a; àp1 = &a;
意义及值:代表是p2指向的空间的内容。即p1的值。0x8000
  
示例:p3 = *p2; àp3 = p1;
  
**p2
  
意义:代表取p2指向空间的值所指向的空间。即a的空间。等同于*p1。等同于a.
  
**p2 à*p1 àa
内容。
  
**p2 à*p1 àa
以上原理大家可以通过代码来验证。


指针操作指针的运算
主要涉及哪些运算?
*
++ --
+ - (* /,但是运算的结果可能没有任何意义)
比较运算(有一定关联的指针之间)
指针的运算与指针的类型有很直接关系。
++/--操作实际上对指针来说,是移动到下一个成员位置,具体多少个字节由指针指向的类型决定。
int p1 ; p1++    sizeof(int) 4
char p2 ;p2++  sizeof(char) 1
char**p3; p3++ sizeof(char *) 4
p1 + 2; p1的值 + 2*sizeof(p1指向的类型)
? = *p1++;            //(1)*p1的值赋给其它变量。(2)p1执行++的操作。
=(*p1)++;   //(1)*p1,即值,然后把值赋值给其它变量,(2)这个变量本身执行++     
= ++(*p1)
?= *++p1;

指针对空间的访问
段错误的原因Segmentationfault
要对一个空间有访问权限,这个空间一定是我们创建的,或者操作系统为我们分配的。在讲C程序的链接属性章节会详细介绍。
int a; //&a
库函数printf
野指针
要对指针进行操作,必须初始化这个指针,且初始化的地址空间是我们拥有相应访问权限的空间。


指针应用
代码编程:strlen(“hellloworld”).
自己实现strcpy,strcmp,strstr系列函数。

会员评论  

已有0参与评论

推荐阅读

[守望者   java初中级视频]22_javaNIO,AIO编程
[守望者 java初中级视频]22_javaNIO,
内容简介:本课程介绍阻塞,非阻塞,同步和异步的基本概念,介绍javaNIO,AIO
[守望者 算法视频]01_数据存储(链表与数组)
[守望者 算法视频]01_数据存储(链表与
本章重点介绍数据的在计算机的存储方式 :连续存储(数组)与链式存储,同时
[守望者   java初中级视频]00_java初中级课程学习导航
[守望者 java初中级视频]00_java初中
内容简介:全面贾少这套视频课程学习需要具备的理论基础,以及适合的学习人群
【守望者 linux项目】linux下的FTP服务器与客户端,作者 灯下野狐 ...
【守望者 linux项目】linux下的FTP服务
本项目是一个完整的FTP服务器及FTP客户端设计示例,对于需要学习网络编程项目
【守望者 游戏项目】基于cocos2d-x的跑酷游戏项目教程
【守望者 游戏项目】基于cocos2d-x的跑
Cocos2d-x跑酷游戏项目教程Cocos2d-x跑酷游戏项目教程cocos2d-x特性cocos2
【守望者 观点】智能路由和Wi-Fi探针是一对好基友
【守望者 观点】智能路由和Wi-Fi探针是
智能路由与Wifi探针可以收集用户行为,同时可以收集用户MAC地址,还可以跟踪
【守望者 linux项目】mini WEB服务器设计
【守望者 linux项目】mini WEB服务器设
以下是曾经Watchmen一个朋友学习网络编程时设计的一个简单的MiniWEB服务器。
[守望者 算法视频]08_数据查找_hash算法
[守望者 算法视频]08_数据查找_hash算
守望者:普通逐个查找O(n),组织方式可以无序的数组或者普通链表。已经排序的
[守望者 linux视频]01_开发工具与开发平台
[守望者 linux视频]01_开发工具与开发
本课主要介绍gcc,gdb等系列开发工具,开始编写程序之旅。要求理解Linux开发平
【解读】什么样性格的人会被夸性格好
【解读】什么样性格的人会被夸性格好
守望者:性格决定命令。好的性格意识着给别人面子,能接受别人装逼,而且以上

行业聚焦  面试交流  职位推荐  开发视频   技术交流  腾讯微博  新浪微博

友情链接:课课家教育  阿里云  鲜果  W3Cfuns前端网  中国企业家  环球企业家  投资界  传媒梦工场  MSN中文网  Android开发者社区  cnbeta  投资中国网  又拍云存储  美通说传播  IT茶馆  网商在线  商业评论网  TechOrange  IT时代周刊  3W创新传媒  开源中国社区  二维工坊  Iconfans  推酷  智能电视网  FreeBuf黑客与极客  财经网  DoNews  凤凰财经  新财富  eoe移动开发者社区  i黑马  网易科技  新浪科技  搜狐IT  创业家  创业邦  腾讯财经  福布斯中文网  天下网商  TechWeb  雷锋网  新浪创业  和讯科技  品途O2O  极客公园  艾瑞网  抽屉新热榜  卖家网  人民网通信频道  拉勾网  创新派  简单云主机  

手机版|黑名单|守望者在线 在线教育 linux 高级程序设计 C/C++ 大数据 ( 蜀ICP备14029946号

成都守望者科技有限公司 © 2013-2016 All Rights Reserved