| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言 指针中的常见名称与用法 -> 正文阅读 |
|
[C++知识库]C语言 指针中的常见名称与用法 |
目录 前言
一、指针是什么指针变量其实就是存放地址的变量,我们知道变量具有三部分信息,即
因为指针变量是存放地址的变量,所以一个指针变量所占的地址空间是固定的,是根据我们程序的寻址空间来确定的(比如寻址空间 4GB = 2^32 Byte,也就是32位的CPU可以访问的最大内存空间,字节在计算机中是最小的可寻址单位,所以用 4 个字节即 2^32 bits 表示指针就已经能指向任何内存空间了,同理64位系统默认指针大小为8个字节。),所以指针的大小根据不同的操作系统为4个或8个字节。 那么了解了指针,接下来要面对的就是?数组指针 指针数组 指针常量 常量指针 函数指针 指针函数这些牛鬼蛇神,虽然名字看起来很唬人非常容易混淆,接下来将一一进行说明,先总结一下它们各自的定义如下:
二、指针与数组C语言规定,数组名代表数组中首个元素(即序号为 0 的元素)的地址,也就是说,如果 s 是一个数组,那么表达式 s 的值就与 s[0] 的地址,即 &s[0] 一致。所以当我们执行赋值语句 p = &s[0]??时,指针变量 p 与数组名 s 具有相同的值,可以写作 p = s?,指针 p 的行为就和数组 s 本身一样。p?在这里指向的是数组的首元素。
数组指针数组指针就是指向数组的指针,声明形式为 类型(*变量名)[] 。
与一维数组的数组名是一个指针相似,二维数组的数组名是一个数组指针,若将二维数组名 a 赋值给数组指针 p ,则可以通过 p 直接控制数组 a 。 第二种情况(指向一维数组名的地址):
p 与 q 虽然都指向数组的第一个元素,但由于 p 的类型和 q 的类型不同 ,数组指针 p 是指向10个元素整形数组的指针, *p 的大小是40个字节,所以?p+1 跳过40个字节;q 是指向整形的指针,*q 的大小是4个字节,所以 q+1 跳过4个字节。 指针数组
元素为指针类型的数组,声明形式为 类型名 * 数组名[数组长度] 。 指针数组最频繁的用处是存放具有不同长度的字符串,作为二维数组的一种便捷替代方式,适合用来存放多个字符串作为字符串数组来使用。
但是,这个方式造成内存浪费,一方面,短字符串会让大部分的行是空的,另一方面,有些行根本没有使用到,但却得为它预留内存,使得分配的12*25=300 个字节只有一小部分被实际使用到。
指针数组让各个指针内容可以按需要动态生成,避免了空间浪费,并且各个指针呈数组形式排列,索引起来非常方便。 指针数组另一个常见作用是作为main函数的形式参数:
argc 和 argv 主要用途为程序运行时,将命令行中的输入参数传递给调用函数。char * argv[]?是一个存储字符串的指针数组,会以字符串的形式保存用户调用程序时传入的参数,存放着指向每一个参数的指针。 三、指针与常量const 是一个C语言的类型限定符,任何变量只要其类型限定符为 const ,则表示对于这些变量,我们无法在后续的程序中修改其对应或指针指向的值。因此,我们常称它们为常量,但其实应该说是个“只读变量”而非常量,只读变量和常量的共同点在于它们的值在第一次出现时便被确定,且无法在后续程序中被修改。但是只读变量和常量的一个最重要的不同点在于,要注意使用 const 修饰的只读变量不具有“常量表达式”的属性,因此无法用来表示定长数组大小,或者是使用在case语句中。常量表达式本身会在程序编译时被求知,而只读变量的值只能够在程序实际运行时才被得知。所以这边大家要知道他们之间是有一定的区别的,但是下面仍用常量来指代只读变量。
const 限定一个变量不允许被改变,使用在指针变量中可以用来限定指针本身的类型,或者是限定指针所指对象的类型,分别对应着我们的指针常量和常量指针。 指针常量
直译是指针类型的常量,联系我们刚刚提到的“只读变量”,我们可以理解成指针类型的“只读变量”,它是一个指针变量但是这个变量是“只读变量”。 而变量是只读的说明了指针其本身存放的内容(值)也就是指向的位置(地址)不能改变,指针本身是一个常量,但是指针所指向的内容(值)是不受限制可以发生改变的。
常量指针
直译是指向常量的指针,同样的我们可以理解成指向“只读变量”的指针,首先是一个指针,其次这个指针是一个指向“只读变量”(具有const限定的变量)的指针,所以可以修改该指针本身的值,但是只能使用这样的指针来读取所指向的对象,不能修改所指向的对象,因此指向常量的指针也常常被称为“只读指针”。
四、指针与函数指针函数
返回指针类型的函数,我们知道一个函数的返回值可以是各种数据类型的,我们常见的是整型的当然也可以是返回的指针类型的数据,即返回一个地址。 函数指针指向函数的指针,声明形式为 函数返回值类型名(* 指针变量名)(函数参数列表)。
函数指针的定义其实就是将“函数声明”中的“函数名”改成“(*指针变量名)”。但是这里需要注意的是:“(*指针变量名)”两端的括号不能省略,括号改变了运算符的优先级。如果省略了括号,就不是定义函数指针而是一个返回值类型为指针型的函数声明了。
?参考链接: |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 6:55:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |