相关疑难解决方法(0)


数组衰减为指针的例外情况?

我在许多帖子中都看到"在大多数情况下,数组名称会衰减为指针".
我可以知道在什么情况下/数组名称表达式不会衰减成指向其第一个元素的指针吗?

c arrays pointers

56
推荐指数
1
解决办法
1万
查看次数

什么是"数组/指针等价"的现代术语?

几乎每个读这篇文章的人都熟悉这三个关于C的关键事实:

  1. 当您在表达式中提及数组的名称时,它会(大部分时间)计算指向数组第一个元素的指针.
  2. "数组下标"运算符[]与指针一样适用于指针.
  3. 似乎是数组的函数参数实际上声明了一个指针.

这三个事实绝对是C中数组和指针处理的核心.它们甚至不是三个独立的事实; 它们是一个中心概念的相互关联的方面.如果没有对这个概念的正确理解,就不可能正确地进行相当基本的C编程.

我今天的问题很简单,这个概念的名称什么?

我以为我是老式的,但我总是把它称为"C中数组和指针之间的等价",或简称为"数组/指针等价".但我知道你几乎不能在SO上说出这些话; 他们几乎是禁忌.

这可能看起来像一个抽象或哲学问题,所以更具体地构建它,我正在寻找的是一个简单的名词或名词短语我可以在句子中使用"是的,由于_____,数组下标可以被认为是作为指针算术的语法糖",回答,比方说,这个问题.

(但是请注意,我不是在寻找这个问题的答案,也不是为了回答"'等价'这个词有什么问题?".是的,我知道,它会误导学习者想象数组和指针是某种方式同样.当我写这个FAQ列表条目时,我确实有这种困惑.)

c arrays pointers terminology

39
推荐指数
5
解决办法
3961
查看次数

*[]和**之间的C差异

这可能是一个基本问题,但写char*[]和char**有什么区别?例如,在main中,我可以有一个char*argv [].或者我可以使用char**argv.我假设两种符号之间必须存在某种差异.

c arrays pointers

15
推荐指数
3
解决办法
2479
查看次数

C编译器如何知道char**x指向一个数组?

在C中,我读过这个char** x并且char* x[]意思完全相同.我理解第二个例子,但我不明白第一个例子.

对我来说,第一个例子是"指向指向字符的指针",但C会将其视为"指向字符数组的指针列表"?

有人能够以外行的方式向我解释这个问题,因为我一直有一个非常困难的时间把握它.

编辑:我承认我说的第一点是我认为人们想要听到的而不是我的实际解释.我也把它看作是指向char的指针,但是当我在这个问题上阅读最佳答案时,我的理解就下降了:char*argv []和char**argv之间的区别是main()的第二个参数

这表明当用作参数向量时,它被用作指向字符指针数组的指针...

c arrays pointers

5
推荐指数
1
解决办法
282
查看次数

'char*args []'和'char**argv'之间的区别作为参数

如果要处理命令行参数,可以main像下面一样定义函数.

int main(int argc, char **argv) { ... }
Run Code Online (Sandbox Code Playgroud)

要么

int main(int argc, char *argv[]) { ... }
Run Code Online (Sandbox Code Playgroud)

在许多网站中,解释了第一个argv是指向指针的指针,第二个是指针数组.但是,这是真的吗?实际上,即使你使用第二个定义,你也可以设置argv=运算符的LHS,如果argv真的是数组,我认为是不允许的.在我看来,"当作为函数的参数写的",char **argv并且char *argv[]是完全平等的.但是,我还没有找到证据.

谁能帮助我?(我想要的是严格或正式书面证据.)


注意:我已经阅读了下面的主题.我相信我的帖子不是他们的副本.

char**x和char*x []之间的区别是什么

在C中,是数组指针还是用作指针?

c c++

0
推荐指数
1
解决办法
729
查看次数