c指针——上课

转载 2016年06月01日 23:12:21

预编译
程序从编辑到执行的过程:

预编译的输入是源程序(文本文件),输出依然是源程序(文本文件), 只不过作了一些替换而已.
1. #define 预编译指令
也称为宏定义. 在计算机技术中, 宏的意思是用一个字符序列替换另一个字符序列.
例:

以下是用字符序列3.14 替换字符序列 PAI

  1. #include 预编译指令

8地址、指针与内存的分配
以上引自于Kerniigan & Ritchie “ The C Programming Language” 第2版 第5章
★C程序中的内存分配有四种形式:①定义各种形式的变量;②定义数组;③动态内存分配;④字符串常量。
★在C程序中可以利用地址 对 当前有效分配给本程序的内存
进行读写操作;
(“当前”指:虽然过去有效分配了,但已释放了,即过期不行,
比如,某函数的自动变量,在函数调用结束后,就不应该对其进行
读写操作; “有效”指:内存被成功地分配给本程序,比如,不成功的动态内存分配)
★ 不能通过地址 对 通过字符串常量分配的内存 进行写操作;
★ C中的地址除了值之外,还有在 以这个地址值开始的内存区域中 所存对象的类型的信息,所谓C 中地址是“两位一体”。
★ C语言中有专门存放地址的变量,就是指针,或(指针变量)。

8.1 C语言中的地址
一谈到C语言中的地址,头脑中就应该反应到,地址有两个要点,或者说含有两个重要的信息,或者说地址是“两位一体”。
1) 地址值是多少?
2) 以该地址值为首地址的内存单元(们)所存的“东西”是什么类型?

比如:
int x; 给你的程序分配了4个字节的内存(整型变量,变量名为x),你可以通过变量名x来存或取整数(即通过变量名x来引用这个变量)。
假定为x分配的内存是以地址0x0012ff44开始的4个字节

在C中变量x的地址可由以下操作(运算)得出:&x
值为:0x0012ff44 (首字节地址值)
&x
是存int型数据的内存的地址,或内存中以这个地址值开头的若干(4)内存单元里所存东西的类型是int

通过运算 *(地址):可以对该地址所对应的内存区域进行某种类型(int)数据的读写操作。
比如:
*(&x)=6; //将整数6以“int 格式”写入以0x0012ff44为首地址的四个字节中,相当于x=6;
b=*(&x)+9; // 将以0x0012ff44为首地址的四个字节中的0,1读出,并将其作为“int 格式”的数// 据,相当于b=x+9;
printf(“%d”, *(&x)); 输出 6。
于是: *(&x)就等价于x
再比如:
float y; // 分配了4个字节的内存,浮点型变量,变量名为y
假定 y的地址为0x0012ff40

在C中变量y的地址可由以下操作(运算)得出:&y
值为:0x0012ff40 (首字节地址值)
&y
是存float型数据的内存的地址,或该地址值开始的内存单元上所存东西的类型是float型

运算 *(地址):可以对该地址所对应的内存区域进行某种类型(float)数据的读写操作。
比如:

*(&y)=3.14; //将3.14以“float 格式”写入以0x0012ff40为首地址的四个字节中,相当于y=3.14;
z=*(&y)/4.0; // 将以0x0012ff40为首地址的四个字节中的0,1读出,并将其作为“float格式”的//数据参与表达式的计算,相当于z=y/4.0;
printf(“%f”, *(&y)); 输出 3.140000。
*(&y)就等价于y

这有神马意思?后面讲 。“变量里的数据是活的(变化的),指针所指的变量是活的”

第二个侧面信息的作用:

*(&x)之所以能够将0x0012ff44 地址上的东西作为整型变量,都是因为&x中含有该地址所对应内存中所存数据的类型的信息
*(&y)之所以能够将0x0012ff40 地址上的东西作为浮点类型变量,都是因为&y中含有该地址所对应内存中所存数据的类型的信息

&x+1 也是一个地址,值为0x0012ff48,因为一个整型四个字节,此处自动地“以一当四”。
&y+1 也是一个地址,值为0x0012ff44,因为一个浮点型四个字节,此处自动地“以一当四”。
第二个侧面信息 “是存float型数据的内存的地址” 或“该地址开始的内存单元上所存东西的类型是float型” 程序中用以下符号 表达 float *
第二个侧面信息 “是存int型数据的内存的地址” 或“这个地址上所存东西的类型是整形” 程序中用以下符号表达 int *

8.2指针(指针变量)是存放地址的变量
1)指针变量的定义:
“是某类型的地址” 变量名;
比如
int * pi;
int a, *pa;
pa=&a;
*pa=4;
printf(“%d\n”,a);
则输出: 4

以上 pi, pa 都是变量,在内存中各占四个字节.(为什么?)

2)利用地址以及指针对内存进行读写操作
定义变量是分配内存的一种手段
例li0803 本例说明可用指针(指针变量)对内存进行相应类型数据的读或写。

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

远程上课直播软件的4种免费体验方式

一个好的教育产品,用户体验是非常重要的参考指标,也是促进成单的主导因素。客户在选择产品时都会向我们要体验站,今天给大家整理一份我们自己的远程直播软件的4种免费体验方式,在业内应该是普遍化而又带自己的特...
  • edu0722
  • edu0722
  • 2017年01月06日 14:13
  • 1356

让你不再害怕指针——C指针详解(经典,非常详细)

前言:复杂类型说明     要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有...
  • soonfly
  • soonfly
  • 2016年04月12日 10:53
  • 59666

C语言中的指针(*p p &p)

    在看博客时,无意看到了一篇关于C语言指针的博客议论。虽然写的内容不多,但是自己觉得还是有用,就记下来了。    学习C语言时,指针的学习是比较难的一部分,常常分辨不了*p   p    &p ...
  • rn7ps8bn
  • rn7ps8bn
  • 2009年09月03日 16:53
  • 4058

C语言指针教程----入门到精通<一>

有一个传说,指针是C语言的精髓;可同时,指针似乎也是C中很难理解的一部分。博主希望在自己复习的同时,写出一些学习心得和体会,供大家讨论。...
  • u014254779
  • u014254779
  • 2014年09月04日 12:39
  • 2484

读《C和指针》 I

相关笔记:《The C Programming Language》阅读笔记 《Pointers On C,C和指针》一书是Kenneth A. Reek所著。我花了一两天时间将此本书通看了一...
  • misskissC
  • misskissC
  • 2014年02月15日 00:31
  • 9212

C语言系列(四)指针概念的理解

转载请标明出处: http://blog.csdn.net/u011974987/article/details/52270018; 本文出自:【XuHao的博客】 前言最近真的是忙的不可开交...
  • u011974987
  • u011974987
  • 2016年08月22日 14:26
  • 4312

C语言复习 -- 多重指针

多重指针指的是在一条语句中有2个或以上的*。   代码如下: #include int main() {  int i[] = {10, 20, 30, 40, 50};  int *p...
  • edwzhang
  • edwzhang
  • 2012年02月01日 13:38
  • 2493

C语言指针表达式(图解)

C语言是软件编程的基础,不管你使用什么语言都会有必要用上它的时候,Android的原生开发NDK就是可以在Java层调用C/C++代码,iOS的objective-c也是在C语言上的一层封装实现的,想...
  • a5533348
  • a5533348
  • 2015年01月19日 13:55
  • 1382

12.3 C语言指针的简单示例

前边我们提到了,指针的意义往往在小程序里是体现不出来的,对于简单程序来说,有时候用了指针,反而可能比没用指针还麻烦,但是为了让大家巩固一下指针的用法,我还是写了个使用指针的流水灯程序,目的是让大家从简...
  • softn
  • softn
  • 2016年07月07日 05:55
  • 499

C语言高级指针

函数指针 当声明一个函数指针时,必须声明它指向的函数类型,即要指出函数的返回类型以及函数的参数类型。 声明一个指向特定函数类型的指针的简单方法是,首先声明一个该类型的函数,然后用( *pf )形式的表...
  • xgf415
  • xgf415
  • 2016年07月19日 19:16
  • 613
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c指针——上课
举报原因:
原因补充:

(最多只允许输入30个字)