C语言常见问题总结--《C专家编程》

2023-11-12

1 c语言的优先级规则:

A 声明从它的名字开始读取,然后按照优先级顺序依次读取
B 优先级从高到低依次是:
B.1 声明中被括号括起来的那部分
B.2 后缀操作符:
括号()表示这是一个函数,
方括号[] 表示这是一个数组
B.3 前缀操作符:星号*表示“指向…的指针”
C 如果const和/或volatile关键字的后面紧跟类型说明符(如int、long等),那么它作用于类型说明符。在其它情况下,const和/或volatile关键字作用于他左边紧邻的指针星号。

例子1
char * const *(*next)();
next是一个指向函数的指针,该指针返回另一个指针,返回的指针指向一个只读的指向char指针

例子2
char *(*c[10])(int **p);
c是一个数组[0…9],它的元素类型是函数指针,其所指向的函数的返回值是一个指向char的指针

2 声明和定义的区别:

定义——为对象(变量或函数)分配内存,只能出现一次 。如 int array[100];
声明——所说明的并非本身,而是描述其他地方的创建的对象,可以多次出现。如extern int array[];

3 指针和数组的区别:

  1. 指针——保存数据的地址;数组——保存数据
  2. 指针——间接访问数据。首先取得指针的内容,把它作为地址,然后从这个地址提取数据。如果指针有一个下标[i],就把指针的内容加上I作为地址,从中提取数据;
    例子:char *p = “abcdefgh”; c=p[i];
    编译器符号表具有一个p,地址为4624。
    1 取地址4624的内容,即’5081‘;
    2 取得i的值,与5081相加;
    3 取地址[5081+i]的内容。】
    数组——直接访问数据。a[I]只是简单的以a+I为地址取得数据
  3. 指针——动态数据结构;数组——存储固定数目且数据类型相同的元素
  4. 指针——malloc/free;数组——隐式分配和删除
  5. 指针——指向匿名函数;数组——自身为数据名

4 数组和指针可交换性的总结:

1、用a[i]这样的形式对数组进行访问总是被编译器”改写“或解释为像*(a+1)这样的指针访问。
2、指针始终是指针,绝不可能改写成数组。可以用下标形式访问指针,一般是指针作为函数参数时,而且知道实际传递给函数的是一个数组。
3、仅在作为函数的参数时,一个数组的声明可以看作是一个指针。作为函数参数的数组(在调用中)始终会被编译器修改成为指向数组第一个元素的指针。
4、当把一个数组定义为函数的参数时,可以选择把它定义为数组,也可以定义为指针。不管哪种方法,在函数内部事实上获得的都是一个指针。
5、在其他所有情况中,定义和声明必须匹配。如果定义了一个数组,在其它文件对他进行声明时也必须把它声明为数组;指针也是如此。

例子:
函数定义
func(int * tunip){…}
func(int tunip[]){…}
func(int tunip[200]){…}
数据定义
int int_1;
int *int_ptr;
int int_array[10];
数组/指针实参的一般用法
调用时的实参 -------------- 类型 ------------------------------------ 通常目的
func(&int_1); --------------- 一个整型数的地址 ------------------- 一个int参数的传址调用
func(int_ptr); ---------------- 指向整型数的指针 ------------------ 传递一个指针
func(int_array); ------------- 整型数组 ------------------------------ 传递一个数组
func(int_array[i]); ----------- 一个整型数组某个元素的地-------传递数组的一部分

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言常见问题总结--《C专家编程》 的相关文章

  • SpringBoot实验合集(持续更新中...)

    实验一 使用Spring Boot构建应用程序 一 实验目的 1 掌握使用IntelliJ IDEA创建Spring Boot应用程序的方法 2 了解spring boot starter parent的配置内容 3 掌握如何利用Start

随机推荐

  • 如何用递归解决逆波兰表达式问题?

    描述 逆波兰表达式是一种把运算符前置的算术表达式 例如普通的表达式2 3的逆波兰表示法为 2 3 逆波兰表达式的优点是运算符之间不必有优先级关系 也不必用括号改变运算次序 例如 2 3 4的逆波兰表示法为 2 3 4 本题求解逆波兰表达式的
  • 蓝桥杯2023年真题 python B组

    第十四届蓝桥杯大赛软件赛省赛 Python 大学 B 组 Python 大学 B 组 试题 A 2023 本题总分 5 分 问题描述 请求出在 12345678 至 98765432 中 有多少个数中完全不包含 2023 完全不包含 202
  • 微服务搭建后端项目

    1 搭建分析 2 开始搭建父项目 父项目选SpringBoot项目 如果使用的idea社区版的话 那就创建maven项目导入如下依赖
  • 索引,元素下标,Java ListIterator 中的 nextIndex() 和 next();

    索引 元素下标 Java ListIterator 中的 nextIndex 和 next 问题 previousIndex 输出前一个元素的下标 索引 nextIndex 输出下一个元素的下标 索引 public static void
  • 使用css动画实现网易云音乐播放界面波浪动画效果

    通过实现CSS实现仿网易云音乐播放界面动画效果 最终的效果如下 界面布局 图片也是实现滚动效果的 使用四个div 来标识每一帧波动的效果 div class container wrap div class container div cl
  • 基于开路电压测量(OCV)的电量计获取锂离子(Li+)电池参数

    获取li 电池参数的步骤 确定满电量和空电量点 提取Li 电池参数的最佳方法是创建一个尽可能与实际应用接近的环境 其中包括保护电路 放电曲线 包括实际应用中有效电流和待机电流的典型值 以及充电曲线 因此需要模拟电池充电和放电过程 并监控和记
  • 地图切片的概念与原理

    为什么80 的码农都做不了架构师 gt gt gt 定义 地图切片 采用预生成的方法存放在服务器端 然后根据用户提交的不同请求 把相应的地图瓦片发送给客户端的过程 它是一种多分辨率层次模型 从瓦片金字塔底层到顶层 分辨率越来越低 但表示的地
  • Redis实现限流的三种方式

    一 固定窗口 所谓固定窗口限流即时间窗口的起始和结束时间是固定的 在固定时间段内允许要求的请求数量访问 超过则拒绝 当固定时间段结束后 再重新开始下一个时间段进行计数 我们可以根据当前的时间 以分钟为时间段 每分钟都生成一个key 用来in
  • Elasticlunr.js 支持其他语言 V0.9.5

    之前一直没有处理其他的语言的需求 所以没有测试elasticlunr js对于其他的语言的支持 多亏了Github的网友 帮忙发现了elasticlunr js对于其他语言支持的问题 昨天 elasticlunr js发布了V0 9 5版本
  • 苹果手机各种尺寸详细表以及iPhoneX、iPhoneXS、iPhoneXR、iPhoneXSMax、iPhone 11、iPhone 12、屏幕适配

    iPhone设备 物理分辨率是硬件所支持的 逻辑分辨率是软件可以达到的 代数 设备 操作系统 逻辑分辨率 point 物理分辨率 pixel 屏幕尺寸 对角线长度 缩放因子 iPhone 第一代 iPhone 2G iOS 1 320 x
  • Centos7 安装Hadoop3 单机版本(伪分布式版本)

    环境版本 CentOS 7 JDK 8 Hadoop 3 CentOS 7 服务器设置 设置静态IP 查看IP配置在 etc sysconfig network scripts 目录下的ifcfg ens33文件中 root Hadoop3
  • requests设置代理ip------验证代理ip是否可用

    文章目录 1 代理ip设置 1 0 透明 普匿 高匿ip区别 1 1 代理设置格式 1 2 详细测试 1 3 报错407 2 验证ip是否可用demo 遇到不可用ip程序会停止 2 1 验证网站 2 2 代码及结果 2 2 1 http h
  • DataX读取Hive Orc格式表丢失数据处理记录

    文章目录 问题 问题概述 问题详细描述 原因 解决方法 修改源码 验证 问题 问题概述 DataX读取Hive Orc存储格式表数据丢失 问题详细描述 同步Hive表将数据发送到Kafka Hive表A数据总量如下 SQL select c
  • 【能量算子】评估 EEG 中的瞬时能量:非负、频率加权能量算子(Python&Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python Matlab代码实现 1 概述 文献来源 瞬时能量的信号处理
  • 用两个栈模拟实现一个队列,其最大容量是多少?

    题目 如何用两个栈模拟实现一个队列 如果这两个堆栈的容量分别是m和n m gt n 你的方法能保证队列的最大容量是多少 这里讨论的是顺序栈 如果是链式栈的话完全没有必要考虑空间 分析 栈的特点是 后进先出 LIFO 而队列的特点是 先进先出
  • Day01人工智能学习---环境安装与配置

    从今天开始自学人工智能 并且每天记录学习过程与反思 希望能帮助遇到和我同样难题的学习者们 鄙人不才 我没遇到的情况也不太会处理 因为每个人电脑性能与使用情况不同 如果小伙伴你遇到其他的问题可以在CSDN是多搜索看看 最主要的是想督促自己每日
  • 小白写逆波兰计算器

    逆波兰计算器 淮南师范学院 电子工程学院 夏健钧 2017 3 24 逆波兰计数法 参考维基百科 include
  • 滴滴(Tinyid)分布式ID算法(实战)

    目录 Tinyid介绍 Tinyid原理 Tinyid实现 1 Http方式 2 Tinyid client客户端 总结 以下文章来源于公众号程序员内点事 作者程序员内点事 Tinyid介绍 Tinyid是滴滴开发的一款分布式ID系统 Ti
  • stm32之实时时钟RTC(掉电计时保持、秒中断、闹钟中断、溢出中断)

    前言 stm32系列产品普遍都有实时时钟RTC模块 它提供一个掉电保持计时功能 掉电后由后备供电区域供电 除了提供时间和日期之外 还可以设置闹钟提醒 且可以在待机模式下设置闹钟唤醒系统 在一些小容量 中容量产品中 只有一个32位的计数寄存器
  • C语言常见问题总结--《C专家编程》

    文章目录 1 c语言的优先级规则 2 声明和定义的区别 3 指针和数组的区别 4 数组和指针可交换性的总结 1 c语言的优先级规则 A 声明从它的名字开始读取 然后按照优先级顺序依次读取 B 优先级从高到低依次是 B 1 声明中被括号括起来