为什么数组下标为负也可以
- 科技动态
- 2025-11-15 21:54:20
- 4
.png)
C中数组和指针到底是否相同? 1、从这里就可以看出,指针和数组并不是等同的,数组的定义并不等同于指针的外部声明(注意声明和定义的区别,定义是为一个变量或者对象分配内存空...
C中数组和指针到底是否相同?
1、从这里就可以看出,指针和数组并不是等同的,数组的定义并不等同于指针的外部声明(注意声明和定义的区别,定义是为一个变量或者对象分配内存空间,而声明只是描述类型)。指针和数组访问时的区别 对数组下标的引用:对指针的引用:从上面的图中可以看出,指针和数组根本就是两个完全不一样的东西。
.png)
2、区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。
3、数组是数组,指针是指针。a是a,a[0]是a[0]。只不过在作为sizeof、&的操作数等有限几个左值上下文之外的场合数组a会退化(隐式转换,结果的类型是元素的指针类型,丢弃了数组类型中的长度)成指向首个元素的指针&a[0],所以容易造成误解。先考虑LZ最后的表述。
4、可以 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在32 位下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。
5、不表示它们相同, 甚至也不能互换。它的意思是说数组和指针的算法定义可以用指针方便的访问数组或者模拟数组。特别地, 等价的基础来自这个关键定义:一个 T 的数组类型的左值如果出现在表达式中会蜕变为一个指向数 组第一个成员的指针(除了三种例外情况); 结果指针的类型是 T 的 指针。
6、定义的不同:C 里,指针和数组是不同的类型,不要把数组名看做“常指针”。所以 sizeof(a) 和 sizeof(p) 值是不同的。容易被混淆的原因:a. 都有基础类型。b. 数组(或者叫数组名)可以默认转化为指针,值为数组首。这就像 int 可以默认转化为 double 一样。
C语言数组下标可以为负吗
声明里的中括号里的数字不能为负。例如 int a[-2]; 是错的,数组大小不能为负。语句里的中括号,C/C++ 看成运算符,不叫标点符号。数组元素和指针有恒等关系:a[i] == *(a+i)所以,i 为 负 的时候,a[i] == *(a- fabs(i)。只要 a-fabs(i) 这个里 有 数值,就可以拿来 运算使用。
下标可以是负值,它的意思是向前寻址,前提是你知道向前寻址寻的内存的东西是你之前已经指定好的,就相当于你动态开辟一块内存给你的数组,这样这个内存里面的所有数据都是你需要的,向前寻址也没什么问题。
size_t其实是自定义类型, 一般是unsigned int.这里用这个, 是为了sizeof的结果为size_t类型, 使用相同类型避免比较的时候编译出告。大多数时候, 数组下标都是用int定义的。
C语言中,运算符除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符。运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。
本文链接:http://www.hoaufx.com/ke/1495322.html