鱼C论坛

 找回密码
 立即注册
查看: 418|回复: 2

[已解决]请问 str[20] 是否可以写成 20[str]?

[复制链接]
发表于 2024-7-13 11:15:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
什么情况下可以呢,为什么我在编译器上做不到。str[20] == *(str + 20) == *(20 + str) == [20]str。能不能用一个代码给我看看。
最佳答案
2024-7-13 11:34:34
本帖最后由 人造人 于 2024-7-13 11:35 编辑
#include <stdio.h>

int main(void) {
    char str[] = "str[20] == *(str + 20) == *(20 + str) == [20]str";
    printf("%c\n", str[20]);
    printf("%c\n", *(str + 20));
    printf("%c\n", *(20 + str));
    printf("%c\n", 20[str]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-13 11:17:17 | 显示全部楼层
str 是 C 语言中的一个指针或数组表示,通常用于字符串处理。如果你想把 str 写成 20 这个值,那么我们需要理解一下你的意思。

### 1. str 作为一个指针
在 C 语言中,`str` 通常是一个字符指针,指向字符串的首地址。如果你直接把 `str` 写成一个整数值(例如 20),这在逻辑上是没有意义的,因为 `str` 应该指向一个有效的内存地址,而不是一个整数值。

### 2. 用指针运算来解释
你提到的 `str == *(str + 20) == *(20 + str) == str` 这种表达式可能是想通过指针运算来访问某个位置的值。以下是一个示例代码:
#include <stdio.h>

int main() {
    char str[] = "Hello, FishC!";
    printf("字符串: %s\n", str);

    // 假设 str 是字符串的起始位置
    // 访问 str + 20 会越界,因为字符串长度小于20
    // 这里仅演示如何进行指针运算
    if (strlen(str) > 20) {
        printf("str[20]的值: %c\n", *(str + 20));
    } else {
        printf("字符串长度小于20,无法访问str[20]\n");
    }

    // 检查 *(str + 20) == *(20 + str)
    if (strlen(str) > 20) {
        if (*(str + 20) == *(20 + str)) {
            printf("*(str + 20) == *(20 + str)\n");
        } else {
            printf("*(str + 20) != *(20 + str)\n");
        }
    }

    return 0;
}

### 3. 解释代码
在上面的代码中,`str` 是一个字符数组,表示字符串 `"Hello, FishC!"`。我们试图通过指针运算来访问 `str` 的第 20 个字符:

- `*(str + 20)` 和 `*(20 + str)` 都是指向 `str` 指针位置加上 20 偏移量处的字符。
- 但如果字符串长度小于 20,就会越界访问,这样做是危险的,可能导致程序崩溃。

### 4. 结论
在正常情况下,你不能直接将 `str` 赋值为 20 这样的整数,因为 `str` 是一个指针或数组标识符,应该指向一个有效的内存地址,而不是一个整数值。指针运算需要基于有效的内存地址和合法的偏移量来操作。

如果你有更具体的需求或问题,欢迎进一步详细说明!希望这个解释对你有所帮助,也让你对指针运算有了更深的理解。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-13 11:34:34 | 显示全部楼层    本楼为最佳答案   
本帖最后由 人造人 于 2024-7-13 11:35 编辑
#include <stdio.h>

int main(void) {
    char str[] = "str[20] == *(str + 20) == *(20 + str) == [20]str";
    printf("%c\n", str[20]);
    printf("%c\n", *(str + 20));
    printf("%c\n", *(20 + str));
    printf("%c\n", 20[str]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 22:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表