C语言-数组的指针/数组指针/指向第一个元素的指针

2024-06-13 12:48

本文主要是介绍C语言-数组的指针/数组指针/指向第一个元素的指针,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下面定义了一个数组arr,有26个元素,其中前两个元素分别是666,777

int arr[26]={666,777};

1.数组的指针,本质上不是指向数组第一个元素的指针

上述代码中,arr默认指向数组的第一个元素,所以代码中直接使用arr,则表示一个int类型的指针,根据这个指针可以找到666,例如下面这样

printf("%p\n",*arr);

但是代码&arr的意思是数组的指针,而不是指向数组第一个元素的指针,虽然下面的代码打印的内容是完全相同

printf("%p\n",&arr);//数组的指针
printf("%p\n",arr); //数组的第一个元素的指针

所以我刻意的认为,“数组指针等于指向数组第一个元素的指针”这句话是错的,数组指针应该是下面这个样子的

// int (*)[26]
int (*p)[26] = &arr;//本文结尾有关于int * p[26]写法的概述

而指向数组第一个元素的指针是下面这个样子的

// 这也是数组默认的情况,就是第一个元素的指针,arr指的就是这种情况
int * p=arr;

我为什么要说这些呢?因为我遇见了下面这个代码

int arr[26]={666,777};
int value=* * &arr;//value=666

可是如何解释呢??将他拆分成下面的代码,就很好解释了

int main(int a,char arg[]){int arr[26]={666,777};int (*p1)[26] = &arr;int * p2= * p1;int p3=*p2;printf("%d\n",p3);
}

所以切记,数组的指针,本质上不等于,数组第一个元素的指针

2.字面串数组与char数组

char arr[这里写不写长度都可以]="abc";
printf("%c\n",*arr);// 会打印出第一个元素
int arr[3]={'a','b','c'};
printf("%c\n",*arr);// 会打印出第一个元素

3.数组作为形参,则自动转化成指向首元素的指针
下面的代码function1和function2是完全相同的,以2为标准

void function1(char p []);
// 与下面完全等效
void function2(char * p);

笔记:int * p[26]
这种没有带小括号的,优先级顺序中括号>*,所以它的意思是p是一个长度26的数组,数组中的每个元素是一个int类型的指针

下一篇:指针的比较/指针加减

这篇关于C语言-数组的指针/数组指针/指向第一个元素的指针的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057345

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码