指针 中 数组指针,指针数组,数组传参,指针传参

2023-11-15

1.指针数组

指针数组是一个数组,里面每个元素是指针。


初始化如下


2.数组指针

指向数组的指针

形式如下int (*p)[5]      因为[ ]比*优先级高,因此表示一个指针必须给*p带上括号

赋初值如下



3.数组指针的应用:

#include<stdio.h>
#include<stdlib.h>
void print(int arr[3][4], int x, int y)
{
	int i= 0;
	int j = 0;
	for (i = 0; i < x; i++)
	{
		for (j = 0; j < y; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}
int main()
{
	int arr[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
	print(arr, 3, 4);
	system("pause");
	return 0;
}

上面的代码,运用数组指针也可以写成如下;

#include<stdio.h>
#include<stdlib.h>
void print(int(*p)[4], int x, int y)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < x; i++)
	{
		for (j = 0; j < y; j++)
		{
			printf("%d ", *(*(p + i) + j));
		}
		printf("\n");
	}
}
int main()
{
	int arr[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
	print(arr, 3, 4);
	system("pause");
	return 0;
}

接下来我们思考写一个数组,数组有5个元素每个元素是一个指针,且指针指向一个有3个整形元素的数组,也就是指向数组的指针数组

   大家应该就写成   int  ( *)[3]  arr[5],按理说是对的,但是不是如此规定应写成  int  ( *arr[5])  [3]  

4.一维数组传参


以上参数形式都可以,我挑几个讲一下,

1.用数组接收当然可以,里面不用指定大小,因为一维数组传参时,形参不会真实创建一个数组,如果是变量值传递,那么形参是实参份临时拷贝,而数组传参时,形参数组不会来一次临时拷贝,传的是首元素地址,不会创建一个数组因此没必要指定大小

2.不指定大小都可以,指定了当然可以

3.传过去地址,用指针接收当然可以

4.传过去是指针数组数组名,用指针数组结束接收可以

5.传过去是指针数组数组名,代表首元素地址,首元素是个指针向数组的指针,再取地址,就表示二级指针,因此用二级指针接收是可以的。

5.二维数组传参


1,2,显然可以,注意里面的3,5不能同时省略,只可以省略第一个参数3

3错误

4.传过去二维数组数组名,代表数组首元素地址,即第一行地址,第一行是个数组,因此用一个数组指针接收,因此4也可以。

6.一维指针传参     即当函数参数部分是一级指针时,可以接受什么参数例如:test(int*p)

(1)可以是一个整形指针

(2)可以是整型变量地址

(3)可以是一维整型数组数组名

7.二维指针传参     即当函数参数部分是二级指针时,可以接受什么参数例如:test(int**p)

(1)二级指针变量

(2)一级指针变量地址

(3)一维指针数组的数组名

类型有很多,这只是一部分。

8.数组,指针的声明和定义

(1)声明和定义针对同一块空间

(2)数组定义需要指定有几个元素,声明不需要。因为声明不会创建空间


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

指针 中 数组指针,指针数组,数组传参,指针传参 的相关文章

  • 【word】如何设置交叉引用标注参考文献

    文章目录 1 定义参考文献编号格式 2 设置交叉引用 插入正文位置 3 修改连续多个参考文献的格式 4 更新正文标注 1 定义参考文献编号格式 开始 gt 编号 gt 定义新编号格式 2 设置交叉引用 插入正文位置 设置好固定的参考文献格式
  • 【vscode,python】pip成功的包却不能导入(import)问题

    第一次遇到这个问题 在网上找了些资料 网上的教程大致上都是需要去修改settings json这个文件 我问了我朋友 然后轻松地解决了这个问题 方法一 关掉编译软件重新打开即可解决问题 方法二 我认为造成这个问题的原因是在另一个新的路径上新

随机推荐

  • 真实GPS转腾讯/高德地图坐标系,百度地图与腾讯/高德地图坐标系转换

    1 获取真实坐标GPS wgs84转为gcj编码方式 positiontransform array manual 定义常量 var GPS PI 3 14159265358979324 x pi 3 14159265358979324 3
  • 对称矩阵的压缩存储、基于压缩矩阵的矩阵乘法

    def disp A 输出方阵A n len A for i in range n for j in range n print d A i j end print def compression A a 压缩矩阵A到a中 A是一个对称矩阵
  • 面试总结(五):搜索引擎

    问题导读 1 搜索引擎有哪些特点 优势 2 搜索引擎使用到哪些场景中 3 如何将原文档传给分次组件 4 如何将得到的词 Term 传给索引组件 Indexer 搜索引擎概述全文搜索就是对文本数据的一种搜索方式 文本数据的都多 可以分为顺序搜
  • 基于verilog语言的SPI协议实现

    前言 关于SPI协议的基础知识这里就不在叙述了 感兴趣的小伙伴可以自行百度 本文基于verilog语言 实现SPI的四种通信模式 封装成通用模块 更新时间 2023年7月11日 更新原因 之前的版本存在bug 通用性不够 模块端口如下 sp
  • java设计模式--[创建模式]--简单工厂[simple factory]

    一 簡單工廠 其實它不是一個設計模式 反而比較像是一種編程習慣 由于經常被使用 有些人把這個習慣誤認為是 工廠模式 在談論工廠模式前 先將簡單工廠熟悉一下 二 簡單工廠的UML類圖如下 三 在此用一個事例說明簡單工廠的用法 在一個酒店里可以
  • 爬虫使用Selenium生成Cookie

    在爬虫的世界中 有时候我们需要模拟登录来获取特定网站的数据 而使用Selenium登录并生成Cookie是一种常见且有效的方法 本文将为你介绍如何使用Selenium进行登录 并生成Cookie以便后续的爬取操作 让我们一起探索吧 一 Se
  • 关系数据库——关系操作和关系完整性

    文章目录 一 关系操作 1 基本的关系操作 2 关系数据语言的分类 关系代数语言 关系演算语言 具有关系代数和关系演算双重特点的语言 二 关系的完整性 1 实体完整性 Entity Integrity 实体完整性规则 2 参照完整性 Ref
  • JavaScript实现三子棋

    目录 要做的事 1 初始化棋盘 2 落子操作 3 判断获胜 4 轮流落子 5 重置棋盘 6 棋盘判满 7 源代码 8 效果展示 要做的事 1 初始化棋盘 首先棋盘是一个3 3的二维数组 而我们的二维数组又是分别由一个一个的一维数组组成的 如
  • PTA 7-11 学生CPP成绩计算 总结

    生成上述类并编写主函数 根据输入的学生基本信息 建立一个学生对象 计算其cpp总评成绩 并输出其学号 姓名 总评成绩 输入格式 测试输入包含若干测试用例 每个测试用例占一行 学生姓名 学号 年龄 cpp成绩 cpp考勤 当读入0时输入结束
  • matlab的diag函数

    1 diag函数 基础用法 生成对角矩阵 diag 1 2 3 4 5 ans 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 5 2 进阶用法 作用 平移对角线 diag a a为正 表示向
  • saltstack部署MySQL主从

    saltstack部署MySQL主从 1 目录结构 2 编写状态文件 2 1 main sls文件内容 2 2 master sls的文件内容 2 3 slave sls文件内容 2 4 grant mysql sls文件内容 2 5 ma
  • 小孩学机器人还是编程好

    小孩学机器人还是编程好 对于很多家长们来说 他们的主要任务就是培养孩子的学习 很多的家长在培养孩子的学习方面可以说是相当的重视的 会给孩子选择一些能够有利于孩子成长的课程 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于小
  • 来自天秤座的梦想_天秤座:单线全自动机器学习

    来自天秤座的梦想 Libra is one of the python package which helps in performing deep learning on a given data set with minimum no
  • git-创建远程分支

    最近公司项目都是迭代 所以需要创建新分支重新开发 1 在当前分支下 一般是master分支 创建test的本地分支 根据自己的需求切换分支进行分支的创建 git checkout b test Switched to a new branc
  • Qt的日常编程过程中遇见的问题和使用

    Qt的日常编程过程中遇见的问题和注意 Qt的日常编程过程中遇见的问题 1 QString和String的转化的格式问题 中文转化过程中会出现问题 2 使用qcustomplot的时候出现错误 LINK2019 无法解析的外部符号 3 Qt报
  • git基础使用

    提交本地仓库 1 git init 初始化仓库 设置用户名和邮箱 进入根目录 cd 查看用户名和密码 cat gitconfig 删除 修改用户名和密码 vim gitconfig 退出 命令行 esc wq q强制退出 git confi
  • 哨兵的作用

    查找中免去越界判断 这种在查找方向的尽头设置 哨兵 免去了在查找过程中每次比较后都要判断查找位置是否越界的小技巧 看似与原先差别不大 但在总数据较多时 效率提高很大 是非常好的编程技巧 代码一 int sequentialSearch in
  • error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor‘

    路径全英文
  • 若依--实现--图片上传

    在学生表当中实现图片 添加 和 修改 只需要4步 其中一步是人家写好的 我们需要现在数据库加一个图片的字段picture 显示页面中只需要这个一步就可以了 field picture title 学生照片 formatter functio
  • 指针 中 数组指针,指针数组,数组传参,指针传参

    1 指针数组 指针数组是一个数组 里面每个元素是指针 初始化如下 2 数组指针 指向数组的指针 形式如下int p 5 因为 比 优先级高 因此表示一个指针必须给 p带上括号 赋初值如下 3 数组指针的应用 include