C语言提高班学习笔记 lesson5 变量、指针
2017-02-19 09:24
399 查看
变量
存储空间的别名,访问这块空间 比指针更安全使用指针也可以访问存储空间 在变量名无法使用的场合
局部参数传递 动态分配内存
指针也是一个变量 有自己的存储空间
指针也会有指针 -> 指针的本质:保存内存地址的变量 使用指针都是间接访问: 指针访问的内存地址,通过内存地址间接访问空间
使用指针赋值和变量赋值的区别
{ int n = 10; //直接访问 int *pn = &n; //间接访问 n = 100; *pn = 1000; return 0; }
转到反汇编
012616A5 mov dword ptr [ebp-4],eax int n = 10; //直接访问 012616A8 mov dword ptr ,0Ah int *pn = &n; //间接访问 012616AF lea eax, 012616B2 mov dword ptr [pn],eax n = 100; 012616B5 mov dword ptr ,64h //一步到位,直接赋值 *pn = 1000; 012616BC mov eax,dword ptr [pn] // 先取值到eax,寻址 012616BF mov dword ptr [eax],3E8h //再进行赋值 return 0; 012616C5 xor eax,eax
使用变量的效率比使用指针的效率高
使用指针的场合
在函数中改变变量的值void foo(int *n) { *n = 100; }
指针和const结合
int main() { //const 在*左边 指针指向的数据 为常量 //const 在*右边 指针本身 为常量 const int *p; int const *p1; int *const p2; const int *const p3; const int const *const p4; int n = 10; int n2 = 100; p = &n2; //指针本身能改 // *p = 100; //指向的数据不能改 // p2 = &n2; //指针本身不能改 *p2 = 1000; //指向的数据能改 return 0; }
指针和数组
//数组:相同变量名的一种集合 属于直接访问 int main() { int array[10] = { 1,2,3,4,5 };//编译器分配一段内存空间 int *parray = array; //array-> 数组的首地址 array[0](同时也是数组的地址) //大部分情况下 数组名=常量指针 //使用指针访问数组 printf("%d\r\n", *parray); printf("%d\r\n", *parray + 1); printf("%d\r\n", *parray + 2); printf("%d\r\n", *parray + 3); // 以下两种场合 // sizeof 运算 指针得到的是指针的大小 数组得到的是数组的大小 // 做&运算 int *paddrarray = &array; //加&代表取当前数组地址 printf("%d\r\n", parray+1,paddrarray+1); printf("%d\r\n", array + 1, &array + 1);//运算的规则不同 // array+sizeof(*array) // *array+sizeof(*&array) return 0; }
相关文章推荐
- C语言学习笔记(6)-如何从变量声明的表面上来区分指针数组和数组指针
- C语言提高班学习笔记 lesson4 符号
- C语言提高班学习笔记 lesson2 结构体
- C语言提高班学习笔记 lesson5 编译
- C语言提高班学习笔记 lesson3 流程控制
- C语言提高班学习笔记 lesson1 自定义数据类型
- C/C++中关于地址、指针和引用变量的学习笔记(八) : 命令行参数
- C语言学习笔记(17指针)
- C/C++中关于地址、指针和引用变量的学习笔记(三) : 结构
- Java学习笔记--Lesson1(Java跨平台原理的剖析和Java环境变量的配置
- C语言学习笔记(15指针)
- what's in string? c语言string类函数实现汇总 都是学习使用指针的好例子啊(算是读书摘抄和笔记吧)
- C语言学习笔记之指针篇(一)
- C语言学习笔记(二)--数据类型、常量和变量简介
- 我的C语言学习笔记之变量
- C语言学习笔记(13指针)
- C/C++中关于地址、指针和引用变量的学习笔记(一)
- C/C++中关于地址、指针和引用变量的学习笔记(四) : 函数
- C/C++中关于地址、指针和引用变量的学习笔记(七) : sizeof和typedef
- C语言学习笔记(十)--指针