C语言第四篇:指针的辨析
2016-03-22 11:25
225 查看
一、基础
地址:内存区的每一个字节都有一个编号,这个编号就称为地址。指针:一个变量的地址称为指针。
指针变量:专门用来存放指针(一个变量的地址)的变量称为指针变量。
定义方法:
基类型 *指针变量名;
如:int *p1; float *p2;
二、疑难
1、内存单元的存取/访问方式(1)直接访问——通过变量名访问,如:printf("%d\n",a);
(2)间接访问——通过指针变量访问,如:printf("%d\n",*p);
2、指针运算符与取地址运算符
*p——指针变量p所指向的存储空间(里面的值)
&p——指针变量p的地址
&*p——就是p指针
*&p——就是p指针
下面用一段程序代码来辨析以上表达式:
测试代码:
/* *Copyright (c)2016,刘兵马俑 *All rights reserved. *文件名称:main.c *作 者:刘兵马俑 *完成日期:2016/03/22 *版 本 号:v1.0 *问题描述:C语言的指针运算符与取地址运算符辨析 *程序输出:不同表达式的值 */ #include <stdio.h> int main( ) { //定义整型变量和整型指针 int a=1; int *pointer=&a; //输出整型变量的值以及指针的初始值 printf("整型变量 a = %d\n",a); printf("指针变量 pointer = 0x%0x(&a)\n\n",&a); //输出需要辨析的表达式 printf("a —— %d \n",a) ; printf("&a —— 0x%0x \n",&a) ; printf("*&a —— %d \n",*&a) ; printf("pointer —— 0x%0x \n",pointer) ; printf("&pointer —— 0x%0x \n",&pointer) ; printf("*pointer —— %d \n",*pointer) ; printf("&*pointer —— 0x%0x \n",&*pointer); printf("*&pointer —— 0x%0x \n",*&pointer); return 0; }
运行结果
结论:*和& 是一对互逆运算符
三、指针变量使用禁忌——野指针
野指针情况(一)—— 指针使用前未初始化
若指针定义时未初始化,则不能使用“*p=10;”对p指针所指向的内存单元赋值,原因是指针必须在指向明确的前提下才能对其赋值。
野指针情况(二)—— 不能用整数为指针变量赋值,如:
int *p;p=0x100000;
这是错误的。
总之,OS对于内存空间的管理是十分严格的。
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 新注册
- Flex程序开发心得小结
- 四大漏洞入侵博客
- Lua和C语言的交互详解
- 编程界主流脚本编程语言的比较和选择
- 什么是Perl?编程语言Perl详细介绍
- C#获取网页源代码的方法
- LCL.VBS 病毒源代码
- 在Ubuntu系统上安装Ghost博客平台的教程
- 编程语言里的静态、动态、强类型、弱类型等概念介绍
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法