《征服C指针》——读书笔记(1)
来源:互联网 发布:java public 编辑:程序博客网 时间:2024/06/13 08:50
一、指针的基本知识
示例代码:
#include <stdio.h>int main(void){ int hoge = 5; int piyo = 10; int *hoge_p; /*输出每个变量的地址*/ printf("&hoge..%p\n", &hoge); printf("&piyo..%p\n", &piyo); printf("&hoge_p..%p\n", &hoge_p); /*将hoge 的地址赋予hoge_p*/ hoge_p = &hoge; printf("hoge_p..%p\n", hoge_p); /*通过hoge_p 输出hoge 的内容*/ printf("*hoge_p..%d\n", *hoge_p); /通过hoge_p 修改hoge 的内容*/ *hoge_p = 10; printf("hoge..%d\n", hoge); return 0;}输出结果:
&hoge..0xbfbfd9e4&piyo..0xbfbfd9e0&hoge_p..0xbfbfd9dchoge_p..0xbfbfd9e4*hoge_p..5hoge..10
要 点:
1. 对变量使用&运算符, 可以取得该变量的地址。这个地址称为指向该变量的指针。
2. 指针变量 hoge_p 保存了指向其他变量的地址的情况下, 可以说“hoge_p 指向 hoge”。
3. 对指针变量运用*运算符, 就等同于它指向的变量。如果 hoge_p 指向 hoge, *hoge_p 就等同于 hoge。
一些要注意的点:
1. C语言混乱的声明
int* hoge_p, piyo_p; 确实符合“类型 变量名;”的格式,但是有问题:
int* hoge_p, piyo_p; 等价于 int *hoge_p; int piyo_p;
2. 关于int main(void)
不推荐 void main(void) 的写法,有返回值的main函数更优,返回0表示通知运行环境程序“正常结束”
二、指针和地址之间微妙的关系
指针就是地址?
/* ANSI C 为我们准备了“可以指向任何类型的指针类型”—— void*类型 */int hoge = 5;void *hoge_p;hoge_p = &hoge; /* 这里不报错 */printf("%d\n", *hoge_p); /* 打印输出hoge_p 指向的变量的值 *//* 第7行会报错,如果仅仅告之内存地址, 却没有告之在那个地址上保存的数据类型,当然是不能取出值来的 */printf("%d\n", *(int*)hoge_p); /* 将hoge_p强制转换成int* *//* 这里通过将“所指类型不明的指针”hoge_p强制转型成“指向int的指针” 来告之编译器类型信息,由此可以取出int类型的值。 但每次都这样写是比较繁琐的,不妨事先写成以下的声明: int *hoge_p; */
三、指针运算
示例代码:
int main(void){int hoge;int *hoge_p;hoge_p = &hoge;printf("hoge_p..%p\n", hoge_p);hoge_p++;printf("hoge_p..%p\n", hoge_p);printf("hoge_p..%p\n", hoge_p + 3);return 0;}
hoge_p..0xbfbfd9e4 // 最初的值hoge_p..0xbfbfd9e8 // 加1 后的值 hoge_p..0xbfbfd9f4 // 加1 之后再加3 的值
对指针进行加1运算,地址的值会增加当前指针所指向数据类型的长度
该例程中hoge_p是指向int的指针,而在作者的环境中int类型的长度为4,所以给地址加1,指针前进4个字节
要点:
对指针加 N,指针前进“当前指针指向的数据类型的长度×N”
0 0
- 《征服C指针》——读书笔记(1)
- 《征服C指针》——读书笔记(2)
- 《征服C指针》——读书笔记(3)
- 《征服C指针》——读书笔记(4)
- 《征服C指针》——读书笔记(5)
- 《征服C指针》——读书笔记(6)
- 征服C指针读书笔记 1 ----- 指针基本概念
- 《征服C指针》读书笔记
- [原]《征服C指针》读书笔记
- 征服C指针
- 征服C指针-NULL
- 征服C指针
- 《征服C指针》笔记
- 征服c指针笔记
- 征服C指针-随记
- C和指针读书笔记——指针
- 《征服C指针》作者语录
- 征服C指针学习笔记
- ~惠享科技趴~
- button的OnClickListener的三种实现方法
- 一篇文章教会你如何抉择市场的行情
- Android android.support.v4.widget.SlidingPaneLayout 侧滑示例
- python log学习笔记
- 《征服C指针》——读书笔记(1)
- SAT数学考题范围 更重考生学术态度
- Java Lab(1)控制台下的人物PK
- 开发几点心得
- 阔别CSDN四年后
- Android推送2-- 推送方式解决方案分析
- 先打11.2.0.3.8这个PSU,后建库
- C#中的String.Format方法
- linux 进程管理相关命令汇总