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

相关文章推荐

csdn推荐——C和指针

  • 2012年10月29日 16:14
  • 3.12MB
  • 下载

HPU 问题 H: 感恩节KK专场——陪学妹上课【规律】

问题 H: 感恩节KK专场——陪学妹上课 时间限制: 1 Sec  内存限制: 128 MB 提交: 45  解决: 21 [提交][状态][讨论版] 题目描述 KK和学妹一起去上线性代数课,号称“...
  • wyjwyl
  • wyjwyl
  • 2015年11月29日 19:25
  • 341

10.6上课——problem1切割木板(USACO 2006 November Gold)

【问题描述】 John 计划修理牧场的栅栏,为此他需要准备 N(1≤ N ≤20000)块特定 长度的木板。第 i 块木板的长度为 Li(1≤ Li ≤50000) 。John 买了一块很长 的...

HPU 1723: 感恩节KK专场——陪学妹上课【规律】

1723: 感恩节KK专场——陪学妹上课 时间限制: 1 Sec  内存限制: 128 MB 提交: 60  解决: 31 [提交][状态][讨论版] 题目描述 KK和学妹一起去上线性代...

SAP BW学习第一课:BW建模——BW建模——上课录屏练习操作步骤记录

总账练习操作步骤记录

【IOS 开发学习总结-OC-7.10-★】 objective-c——函数与指针

指针变量出了可以指向普通的 int变量,float 变量和数组外,还可以指向函数的入口。用函数指针变量调用函数定义函数后,C 语言允许定义一个指针变量来指向该函数。 使用函数指针的步骤: 1. 定...

令人震惊的事实:数组和指针并不相同——C专家编程

C语言 数组和指针
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c指针——上课
举报原因:
原因补充:

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