数组名专题

数组名是指针,为什么sizeof(数组名)还是数组的大小

数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针"。这种误解的根源在于国内某著名的C程序设计教程(出版量最多的那本破书)。 数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;指向

C语言指针与数组名的联系

目录 一、数组名的理解 a.数组名代表数组首元素的地址 b. 两个例外 二、使用指针来访问数组 三、一维数组传参的本质 一、数组名的理解 a.数组名代表数组首元素的地址         我们在使用指针访问数组的内容时,有这样的代码: int arr[10] = {1,2,3,4,5,6,7,8,9,10};int *p = &arr[0]; 这里我们使用 &arr

数组名的含义、指针含义

数组名的含义            int a[2]={1,2};              cout<<&a<<endl;          cout<<a<<endl;          cout<<&a[0]<<endl;          cout<<*a<<endl;          cout<<sizeof(a)<<endl;   0012F0C8 0012F0C8 0012F0

数组名a与a的区别

这里我们先看看数组名代表的是什么,这个概念可能大家有所误解,认为数组名代表的就是数组的地址,当然,数组名代表的是一个地址,但是关键是,通过这个地址,我们关注的是它能取得多大空间的数据的值,例如对于一个char 类型的地址,我们能够取得一个字节的值,对于一个int型的地址,我们能够取得4个字节的值。     这里我们以整形数组为讲解:int  a[4];    a是一个地址,我们知

由sizeof()引出的对数组名和指针的新认识

在C++中,数组名和指针有很多类似的地方,甚至很多时候,数组名与指针可以互相替换,我也一直以为两者没什么值得注意的区别,直到看到了一道题,才发觉自己知识的匮乏。 void UpperCase(char str[]) // 将 str 中的小写字母转换成大写字母 {for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i ) if(

常见C语言基础说明五:数组名当函数参数传入

一.  简介 前面几篇学习了  C语言中基础问题,文章如下: 常见C语言基础题说明一-CSDN博客 常见C语言基础说明二:位运算问题-CSDN博客 常见C语言基础说明三:static修饰的函数或变量-CSDN博客 常见C语言基础说明四:#define宏定义与 a---CSDN博客 本文继续学习 嵌入式C开发中,可能涉及的一些C语言基础问题。 二.  常见C语言基础说明

深入理解指针2,数组名理解,指针访问数组,冒泡排序,二级指针,指针数组模拟二位数组

1.数组名理解 数组名就是首元素(第一个元素)地址,和&arr[0] 意思一样。首元素的意思是第一个元素的地址。看这样图都是4个字节,他俩一样的 int main(){int arr[10] = { 0 };int arr2[10] = { 0 };printf("arr = %p\n", arr);printf("arr +1= %p\n", arr + 1);printf("&arr[0

深入理解指针2:数组名理解、一维数组传参本质、二级指针、指针数组和数组指针

1、数组名理解 首先来看一段代码: int main(){int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };printf("%d\n", sizeof(arr));return 0;} 输出的结果是:40,如果arr是数组首元素的地址,那输出应该是4/8才对。 其实数组名就是数组首元素(第一个元素)的地址是对的,但是有两个例外: sizeof(数组名)。s

二维数组和二维数组名

对于一位数组我们认识到其数据元素在内存中是按线性顺序依次排列的,且一维数组名的值是一个指针常量。那么二维数组在内存中又是怎么存储的,其数组名又有什么含义呢?    定义一个二维数组: int Arr   [3] [4] = {{1,1,1,1},{2,2,2,2},{3,3,3,3},{4,4,4,4}};   我们可以将一个二维数组看做是一个其中元素为数组的一个一位数组,也就是说二维数组第一

数组名结合指针的面试题的讲解

笔试题 第一题: 已知条件: 已知p为结构体指针变量,值为0x100000,并且结构体的大小为20字节,并且打印格式均为%p,%p不会在乎正负数,它会以补码的形式直接打印,0x1为16进制的1。 第一问:p+0x1,

【C语言】关于数组名遇到的问题

最近在写程序的时候遇到这么一个问题:用结构体创建了一个数据组。然后想用结构体作为参数去运行函数: test((creat*)data);​test((creat*)&data); 上面两种方式都可以运行。结果正确。 其中,data为数组名;creat为结构体的句柄;test为函数名。 数组名data和&data的内存地址相同。数组名相当于一个指针,指向第一个元素。也就是代表数组的首地址

数组名的理解,看这一篇就够了!!!

!!!以下是会涉及到的知识的讲解: 一:数组名的理解: 数组名是数组首元素的地址,但是有2个例外: 1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。 2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址 除了这两点以外,以外的数组名都是数组首元素的地址!! 二:两个理解(sizeof和strlen) 1、用法不一样 sizeo

C语言-数组名真的不是指针

文章目录 1 前言2 关于一维数组3 sizeof运算符和自增运算符4 数组名也不是常量指针5 总结 1 前言 参照我之前的两篇文章: 二维数组做函数的参数 动态创建二维数组 事实告诉我们,二维数组名不等于二级指针 2 关于一维数组 对于一维数组,用一级指针指向数组名,用一级指针做参数传递一维数组,似乎毫无问题。 void f(int *p);int main(void

2024龙年特别篇 -- 魔法指针 之 数组名的理解

你是否为不理解关于指针数组名而焦虑,听说该博主白子寰讲得很详细喔  目录 指针的数组名 VS &数组名 ①段代码  ②段代码 小结 指针访问数组 指针的数组名 VS &数组名 我们先来看下段简单的代码 ①段代码 int main(){int arr[10] = { 0 };printf("%p\n", &arr);printf("%p\n", &arr

C语言数组名涵义

1. 数组名涵义 在C语言程序中,数组的出现有两种可能的含义: 代表整个数组代表其首元素的地址 当出现以下情形时,数组代表的是整个数组: 在数组定义中在 sizeof 运算表达式中在取址符&中 当出现其他情形时,数组代表其首元素地址。 示例: int a[3]; // 此处,a 代表整个数组printf("%d\n", sizeof(a)); // 此

为什么二维数组名不能赋值给二级指针

问题: 我自己的想法是:二级指针是指向指针的指针,二维数组是元素为一维数组的数组,既然一维数组可以赋值给一级指针,那为啥二维数组不能赋值给二级指针呢? 回答: 我理解你的问题是不是这样:char a[2][2]; char**p = a;为什么会报错是吧?你理解的是对的,但是错在,a是指向一维数组,p是指向char*,这两个不等价。a指向一维的char数组,sizeof(a),可得其内存大小为s

[学习小结]数组名与数组首元素地址解析

2012.04.12 学C++的日子里经常被莫名其妙的问题(没意义但是很纠结的问题)给缠住,然后想了半天,大概是处于这么一个状态:知道怎么用,但是却不知道为什么是这样,而且还带有一点疑问。 今天被 变量名 这个问题给缠住了。因为我有个概念,CPU只认识地址,那么声明个变量到底是怎么回事,这个变量不是地址啊。 然后得出了这个结论。 编译器都帮我们弄好了,机器码内是没有

【C语言】深入理解指针(3)数组名与函数传参

正文开始——数组与指针是紧密联系的 (一)数组名的理解 (1)数组名是数组首元素的地址    int arr[10] = {1,2,3,4,5,6,7,8,9,10};int *parr = &arr[0];         上述代码通过&arr[0] 的方式得到了数组第一个元素的地址,但其实数组名本身就是一个地址,并且是数组首元素的地址。 代码1: #include<std

C语言赋值表达式中什么是左值和右值?数组名作为左右值时又具有怎样的意义?

一、问题         赋值表达式中可以分为左值和右值,那么什么是左值和右值?数组名做为左右值时又具有怎样的意义? 二、解答 在C语言中,左值和右值的概念对于理解赋值表达式以及程序的正确性非常重要: 1、左值 • 左值是一个可以出现在赋值运算符左边的表达式,也就是说,它可以被赋予一个新值。• 左值代表一个可寻址的内存位置,即存储数据的位置。例如变量、数组元素或指针解引用等。• 在C

面试题理解深层次的数组名

目录 引言  一:一维数组 举例如下 1.铺垫知识  数组名是数组首元素的地址,但是有两个特殊情况 (1)sizeof(数组名) (2)&数组名 2.分析讲解上述代码结果 2.字符数组  举例一如下 1.知识铺垫 2.分析结果 举例二如下  举例三如下  三:二维数组  1.知识铺垫 举例如下 2.仔细分析讲解  四:感谢观看  听说看到日落金山

数组名和函数名是什么东西

数组名和函数名的本质都是一个“指向数组首地址或函数体的指针常量”的名字 规则1:数组 = 指向数组首地址的指针常量 + 数组元素 简单说就是,数组 = 指针常量 + 数组内容, 数组名就是这个指针常量,这个指针常量一切语法意义都原样保留了(只有一个特例,就是对这个指针常量取地址)。 对数组取地址操作,其实取出的是“指向数组首地址的指针常量”的地址值,但由于 “指向数组首地址的指针常量”已经被优化

变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符

程序在运行过程中需要的是数据和指令的地址,变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符:在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址;程序被编译和链接后,这些名字都会消失,取而代之的是它们对应的地址。   截图自

C++二维数组名到底代表个啥

题目先导 int a[3][4]; 则对数组元素a[i][j]正确的引用是*(*(a+i)+j) 先翻译一下这个*(*(a+i)+j),即a后移i解引用,再后移j再解引用,这么看来a就应该是个二维数组,第一层存储行向量,一次解引用获得行向量的地址,再根据列位置解引用获得具体元素。 做实验对a逐步分解输出如下: 可以看到,a本身就是个地址,但是他指向的内容仍是该地址,该地址指向的内容是数组

【C语言学习】数组名的实质

🐱作者:一只大喵咪1201 🐱专栏:《C语言学习》 🔥格言:你只管努力,剩下的交给时间! 数组名的本质 描述一维数组在内存中的储存一般情况下数组名的实质在操作符sizeof下数组名的实质在操作符&下数组名的实质 二维数组在内存中的储存一般情况下数组名的实质在操作符sizeof下数组名的实质二维数组行数和列数的求法:在操作符&下数组名的实质 总结 描述 在需要创建很

笔记:数组名和取数组地址

对于一个数组:int a[]={1,2,3,4,5} 1.数组名a代表数组的首地址,可以引用下标为 0的元素,但其单元为整个数组的大小。 2.&a取数组a的地址,可以看成是指向数组a的指针。 (注意此时p的指针类型不是整形,即其一个单元并不是sizeof(int),而且一整个数组元素占用的总字节。) 用sizeof输出一个单元占用内存的字节大小: sizeof(a)=20; sizeo