printf语句的异常输出

时间:2015-06-26 19:47:27

标签: c arrays

submitHandler:
                    $("#myform").on('submit', function () {
                        alert("have just pressed submit");
                        if ($("#myform").valid()) {
                            alert("here some code inside $.AJAX({})");
                        }
                        return false;
                    })

此语句如何生成输出printf("%c",3["abcde"]); ?编译器如何执行此语句?我理解为d = a[5]的{​​{1}} = 5[a]的int数组。但是这里的字符串充当除字符串名称(变量名称)之外的索引。

4 个答案:

答案 0 :(得分:6)

在你的情况下

 printf("%c",3["abcde"]);

可以读作

 printf("%c","abcde"[3]);

或者,作为我们最熟悉的语法,

char p [] = "abcde";
printf("%c",p[3]);

它基本上归结为访问数组索引3中的元素(C使用基于0的数组索引)。

这只是数组索引的语法糖。你可以用任何你喜欢的方式。

如果您想挖掘更多信息以便更好地理解,可以查看this question and related answers

注意:正在挑剔

您的代码段是语句,请勿将其称为程序

答案 1 :(得分:5)

数组访问器运算符[]可以使用"两种方式",因此3["abcde"]等同于"abcde"[3],索引3(0为开头)包含d。

编辑:

我们有一个字符串常量而不是变量这一事实并不重要。字符串常量存储在内存的只读部分中,隐式输入为const char *。所以以下内容相当于您发布的内容:

const char *str = "abcde";
printf("%c",3[str]);

答案 2 :(得分:4)

3["abcde"]相当于*(3 + "abcde"),因此"abcde"[3] 当在表达式中使用时,除了一些例外,"abcde"将被转换为指向其第一个元素的指针,即它基本上给出了字符串"abcde"的基址。

将基地址添加到3将给出字符串"abcde"的4 th 元素的地址,因此3["abcde"]将给出4 th < / sup> element。

答案 3 :(得分:0)

让我们打破这个:

printf("%c",3["abcde"]);

printf以特定格式打印数据。

格式为%c,因此输出将是单个字符。

正在打印的字符为3["abcde"]"abcde"是一个字符数组,正在访问的是第四个字母。这是因为数组从0开始。在这种情况下,'a'是字符0,'b'是字符1,直到'e'是4。

要访问“b”,它将是1["abcde"]

注意:3["abcde"]与撰写"abcde"[3]相同,并且在两种情况下都等于字符'd'