c语言学习笔记之指针
2015-12-12 11:23
405 查看
指针
内存中最小的存储单元:字节,每个字节在内存中都有一个编号,这编号就是指针
指针:内存地址
有了指针你就有了打开这块内存的钥匙,就可以操作这一块的内容了
指针变量:存放内存地址的变量
定义指针:指针所指的数据类型 * 指针变量名称
在定义变量的时候,*表示类型说明符,说明定义的这个变量指针变量
使用场景:
在被调函数中,通过形参改变主调函数实参的值
用于函数返回多个值
多级指针(了解)
指向指针的指针
指针为什么要分数据类型
变量的地址是变量所占存储空间的首地址
指针变量仅仅可以存储一个地址编号,如果没有类型,当通过指针就不知道要访问多少个字节的存储空间
指针区分类型是为了通过 指针访问他所指向的存储空间,能够正确访问
如果通过一个char类型的指针操作一个int的变量,如果值的二进制数据超过1字节(char占一个字节,int占4个字节),那么就造成数据错误
如果通过一个int 类型的指针操作一个char变量,那么你就会修改了你不该修改的内存,造成程序逻辑错误
指针与一维数组:
数组像一个指针
nums[1] == p[1]
nums+1 = p + 1
nums[1]的本质*(nums + 1)
指针 + 整数 ==== 指针的值 + sizeof(所指向的数据类型)*整数
数组不是指针
sizeof(array) != sizeof(pointer);当一个数组赋值给指针变量时候,那么数组中有些信息就丢失了,比如:数组的长度,这种现象指针信息遗失
指针的指向可以改变,数组的指向不能改变
array == &array
指针与二维数组(理解)
二维数组的名称为一维数组的地址指针
定义指针数组格式
数据类型 * 指针变量名称[指针个数]
*p == p[0]:没有人这么写
定义指向一维数组的指针
int (*ps)[3]
int nums[3][2]和int (*ps)[2]
ps == nums
nums 和 nums[0]
相同点:对应的地址是一样的
不同点:指针类型不同
nums + 1 = nums + sizeof(nums[0]
nums[0] + 1 = nums + sizeof(int)
sizeof(nums):二维数组所占用的存储空间字节数
内存中最小的存储单元:字节,每个字节在内存中都有一个编号,这编号就是指针
指针:内存地址
有了指针你就有了打开这块内存的钥匙,就可以操作这一块的内容了
指针变量:存放内存地址的变量
定义指针:指针所指的数据类型 * 指针变量名称
在定义变量的时候,*表示类型说明符,说明定义的这个变量指针变量
使用场景:
在被调函数中,通过形参改变主调函数实参的值
用于函数返回多个值
多级指针(了解)
指向指针的指针
指针为什么要分数据类型
变量的地址是变量所占存储空间的首地址
指针变量仅仅可以存储一个地址编号,如果没有类型,当通过指针就不知道要访问多少个字节的存储空间
指针区分类型是为了通过 指针访问他所指向的存储空间,能够正确访问
如果通过一个char类型的指针操作一个int的变量,如果值的二进制数据超过1字节(char占一个字节,int占4个字节),那么就造成数据错误
如果通过一个int 类型的指针操作一个char变量,那么你就会修改了你不该修改的内存,造成程序逻辑错误
指针与一维数组:
数组像一个指针
nums[1] == p[1]
nums+1 = p + 1
nums[1]的本质*(nums + 1)
指针 + 整数 ==== 指针的值 + sizeof(所指向的数据类型)*整数
数组不是指针
sizeof(array) != sizeof(pointer);当一个数组赋值给指针变量时候,那么数组中有些信息就丢失了,比如:数组的长度,这种现象指针信息遗失
指针的指向可以改变,数组的指向不能改变
array == &array
指针与二维数组(理解)
二维数组的名称为一维数组的地址指针
定义指针数组格式
数据类型 * 指针变量名称[指针个数]
*p == p[0]:没有人这么写
定义指向一维数组的指针
int (*ps)[3]
int nums[3][2]和int (*ps)[2]
ps == nums
nums 和 nums[0]
相同点:对应的地址是一样的
不同点:指针类型不同
nums + 1 = nums + sizeof(nums[0]
nums[0] + 1 = nums + sizeof(int)
sizeof(nums):二维数组所占用的存储空间字节数
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 关于指针的一些事情
- 如何写好 C main 函数
- Lua和C语言的交互详解
- C# Pointer指针应用实例简述
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置