Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >数组的索引与argc的符号性

数组的索引与argc的符号性
EN

Stack Overflow用户
提问于 2010-03-14 06:08:58
回答 3查看 1K关注 0票数 6

C标准 (5.1.2.2.1程序启动)说:

在程序启动时调用的函数名为main。..。 它应该是带返回类型int且没有参数的defined: int main(void) { /* ... */ } 或者有两个参数: int main(int argc, char *argv[]) { /* ... */ }

后来又说:

argc值应为非负值。

  • 为什么argc不应该被定义为unsigned intargc的意思应该是‘参数计数’?
  • 是否应该使用argc作为argv的索引

所以我开始怀疑C标准是否反映了数组索引的类型。签了吗?

6.5.2.1数组订阅

其中一个表达式应具有“指向对象类型的指针”类型,另一个表达式应具有整数类型,而结果类型为“类型”。

它没有提到它的签名(或者我没有找到)。使用负数组索引(array[-1])的代码非常常见,但它不是未定义的行为吗?

  • 数组的索引应该没有签名吗?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-14 06:13:18

main()中使用int的原因是历史的--它一直是这样的,早在语言标准化之前就有了。数组索引的要求是它在数组的范围内(或者在某些情况下,超过一个结束)--其他的任何东西都是未定义的,所以签名是无关紧要的。

票数 6
EN

Stack Overflow用户

发布于 2010-03-14 06:31:20

1) main() argc类型: IMHO标准延续了一个非常古老的传统( 30多年!),现在.现在进行更改已经太晚了(注意:在大多数系统中,编译器、链接器和CPU都不会抱怨"argc“是否定义为”无符号“,但这是不符合标准的!)

2)在大多数实现中,argvargc是合法的,计算结果为NULL。实际上,找到参数列表末尾的另一种方法是从0开始迭代argv,当argvi为NULL时终止。

3)当地址范围从(P)到p属于同一内存对象时,带有负数的数组/指针算法是合法的。也就是说,你可以

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char array[100];
char *p;

p = &array[50];
p += -30; /* Now p points to array[20]. */

这种指针算法的使用是合法的,因为结果指针仍然保留在原始内存对象(“数组”)中。在大多数系统上,指针算法可以用来在内存中导航,这违反了这一规则,但这是不可移植的,因为它完全依赖于系统。

票数 3
EN

Stack Overflow用户

发布于 2010-03-14 15:13:31

一般来说,在C中,“最小惊奇原则”意味着最好是使一个变量有符号,除非有充分的理由使它没有符号。这是因为当混合有符号值和无符号值时,类型提升规则可能导致意外的结果:例如,如果argc是无符号的,那么这个简单的比较会导致令人惊讶的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (argc > -1)

( -1被提升为unsigned int,因此它的值被转换为UINT_MAX,这几乎肯定大于argc)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2442411

复制
相关文章
PHP 数组:索引数组与关联数组
在静态语言(C、Java、Go)中,数组的定义通常是同一类型数据的连续序列,PHP 的数组从功能角度来说更加强大,可以包含任何数据类型,支持无限扩容,并且将传统数组和字典类型合二为一,在 PHP 中,传统的数组对应的是索引数组,字典类型对应的是关联数组,这得益于 PHP 底层通过哈希表实现数组功能。下面,我们就来简单介绍下 PHP 索引数组和关联数组的基本使用。
学院君
2020/05/27
5.8K0
【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )
参考 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读) 博客 , 进行理解 ;
韩曙亮
2023/03/29
4930
Matlab的数组索引
在 MATLAB中,根据元素在数组中的位置(索引)访问数组元素的方法主要有三种:按位置索引、线性索引和逻辑索引。
用户9925864
2022/07/27
1.7K0
索引的数据结构及算法原理--索引选择性与前缀索引
既然索引可以加快查询速度,那么是不是只要是查询语句需要,就建上索引?答案是否定的。因为索引虽然加快了查询速度,但索引也是有代价的:索引文件本身要消耗存储空间,同时索引会加重插入、删除和修改记录时的负担,另外,MySQL在运行时也要消耗资源维护索引,因此索引并不是越多越好。一般两种情况下不建议建索引。
陈不成i
2021/06/08
4910
寻找数组的中心索引
上面这么一道题,是我在刷题的时候遇到的,其实这道题也不难,就是list的元素和,判断最后是否满足 左边的等于后边的和,返回索引。
雷子
2021/03/15
8420
mysql前缀索引的索引选择性
一. 基础概念 在mysql中建立前缀索引的意义在于相对于整列建立索引,前缀索引仅仅是选择该列的部分字符作为索引,减少索引的字符可以节约索引空间,从而提高索引效率,但这样也会降低索引的选择性 关于索引的选择性,它是指不重复的索引值(也称为基数cardinality)和数据表的记录总数的比值,范围从1/(数据表记录总数)到1之间。索引的选择性越高则查询效率越高,因为选择性高的索引可以让MySQL在查找时过滤掉更多的行。选择性为1的索引叫唯一索引,这是最好的索引选择性,性能也是最好的 建立合理前缀索引的诀窍在于要选择足够长的前缀以保证较高的选择性,同时又不能太长(以便节约空间)。前缀应该足够长,以使得前缀索引的选择性接近于索引的整个列。换句话说,前缀的基数应该接近于完整列的基数
全栈程序员站长
2022/08/31
6970
mysql前缀索引的索引选择性
窥探Swift之数组安全索引与数组切片
  今天是元宵节,祝大家元宵节快乐!在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值。在使用数组时,一个常见的致命错误就是数组越界。如果在你的应用程序中数组越界了,那么对不起,如果由着程序的性子的话是会崩溃的。为了防止崩溃呢,我们会对集合做一些安全的处理。比如对数组进行扩展,从而对数组的索引进行安全检查,保证数组的index在正常范围内。在Objective-C中也是经常对数组,字典等做一些处理操作。   今天的博客的主要内容是先对Objec
lizelu
2018/01/11
2.6K0
窥探Swift之数组安全索引与数组切片
LeetCode 1822. 数组元素积的符号
给你一个整数数组 nums 。 令 product 为数组 nums 中所有元素值的乘积。
Michael阿明
2021/09/06
3320
LeetCode 1822. 数组元素积的符号
https://leetcode-cn.com/problems/sign-of-the-product-of-an-array/
freesan44
2021/09/22
3430
LeetCode 1822. 数组元素积的符号
第25期:索引设计(索引的基数与可选择性)
这篇主要介绍 MySQL 索引的 Cardinality 值(基数)以及索引的可选择性。
爱可生开源社区
2021/04/23
6670
LeetCode - 山脉数组的封顶索引
LeetCode第852题,难度是简单。最近这几题,我一看题解里面没有比我更优秀的,果断把自己的题解写了上去,美滋滋。
晓痴
2019/07/24
7090
LeetCode - 山脉数组的封顶索引
原 argc argv
通过以下例子来作说明: [root@localhost arg]# cat argtest.c  #include <stdio.h>//#包含<stdio.h> /* 整数类型主函数(整数类型统计参数个数,字符类型*数组指针至字符[]) */ int main(int argc,char* argv[]) { printf("%d\n",argc);//格式化输出 while(argc)//当(统计参数个数) printf("%s\n",argv[--argc]);//格式化输出 ret
王果壳
2018/05/17
1K0
python中的argv和argc
argc:argument counter,命令行参数个数 argv:argument vector,命令行参数向量(内容)
py3study
2020/01/09
2.7K0
【小技巧】argc和argv的用法
有时候,这个argv还会在main函数实现中被用到,那么就会有小伙伴不知道是干嘛用的,或者说知道是干嘛用的,不知道怎么用。
看、未来
2020/08/25
1.4K0
[PHP] php中的索引数组和数组顺序问题
先上结论 , php的索引数组不是传统的从0开始的整数索引数组 , 而是一个关联数组 , 是一个有序的键值对 ,这个序就是定义时候的顺序
唯一Chat
2021/04/25
9.3K0
mybatis中的#号与$符号的区别
#{变量名}可以进行预编译、类型匹配等操作,#{变量名}会转化为jdbc的类型。 select * from tablename where id = #{id} 假设id的值为12,其中如果数据
斯文的程序
2019/11/07
1.4K0
724. 寻找数组的中心索引
我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。
Michel_Rolle
2021/02/02
2.5K0
Oracle 重建索引的必要性
      索引重建是一个争论不休被不断热烈讨论的议题。当然Oracle官方也有自己的观点,我们很多DBA也是遵循这一准则来重建索引,那就是Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引。近来Oracle也提出了一些与之相反的观点,就是强烈建议不要定期重建索引。本文是参考了1525787.1并进行相应描述。
Leshami
2018/08/13
2K0
MySQL索引与MongoDB索引的区别
介绍了为什么MySQL使用B+TREE 而 MongoDB使用B-TREE
俺也想起舞
2021/08/23
5.3K1
[javascript] 删除数组中null的元素并重建数组索引
想要去掉这里面的null,如果使用delete实现,那个元素的索引还是原来的,这个时候使用.length的时候还是会算上那个元素
唯一Chat
2022/02/23
3K0

相似问题

argc /argc影响数组中的空字节?

21

变量与符号的渐近性差异

13

符号函数符号和内索引数组时的下标索引错误

10

“argc+ argc”的意思是什么?

38

数组索引的类型:有符号/无符号整数前卫

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文