理解一维数组中 buf、buf[0]、buf[0]、buf 四个符号的含义

2023-12-16 02:08

本文主要是介绍理解一维数组中 buf、buf[0]、buf[0]、buf 四个符号的含义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文内容摘自《C语言内核深度解析》一书的深入学习数组部分。

以 int buf[100]={0} 为例,集中讨论 buf、buf[0]、&buf[0]、&buf 四个字符含义的内涵。

1、buf:有两层含义,一是数组名,sizeof(buf) 时就是数组名的含义;二是等价于 &buf[0],表示数组的第一个元素的首字节地址,是一个常量值。因此,既然是一个常量值,无论从哪层含义来使用,buf 都不能作为左值来使用,但是,buf 可以用来作为右值来使用,作为右值使用时,应理解为地址。

2、buf[0]:表示存储第一个元素的空间,可对其进行读写操作,所以可以作为左值来使用。

3、&buf[0]:等价于 buf,是一个地址常量,只能作为右值使用。

4、&buf:表示地址的首地址,是一个地址常量,只能作为右值使用。

buf 与 &buf 的值相等,但是含义完全不同。printf("%p\n",buf) 与 printf("%p\n",&buf) 这两条代码的打印结果是相同的,表明它们的值是相同的,但是 printf("%p\n",buf+1) 与 printf("%p\n",&buf+1) 的结果完全不同,因为它们的含义不同,buf 表示数组的第一个元素的首字节地址,加 1 加的时一个元素空间的大小;&buf 表示的是整个数组的首地址,加 1 加的是整个数组空间大小,数组首地址主要用于构建多维数组,对于一维数组来说,数组首地址没有太大的实用意义。

这篇关于理解一维数组中 buf、buf[0]、buf[0]、buf 四个符号的含义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while