首页 > 解决方案 > 'o' = 'u' + 6,这不应该是'o' = 'u' - 6吗?数组默认值不是 0 吗?

问题描述

我真的很困惑。ASCII中小写字母'a'的最小值和最大值。'z'但为什么'o' = 'u' + 6呢?

比如说我有

char array[100] = "errur";
char *ptr = array;

那我需要做

ptr[3] -= 6; // this
ptr[3] += 6; // not this

难道我做错了什么?


默认情况下,数组也不初始化为零吗?所以int array[10];元素array[9]最初的值为0?


最后,当我&在 shell 中运行时,命令作业是列出工作事件的唯一方法吗?

标签: clinux

解决方案


在 ASCII中,'u'有值117'o'有值,111所以你必须减去才能6得到:'u''o'

#include <stdio.h>

int main(void)
{
    char array[100] = "errur";
    array[3] -= 6;
    printf("%s\n", array);
}

默认情况下,数组也不初始化为零吗?所以int array[10];元素array[9]最初的值为0?

不,如果您不初始化自动变量,它们的值是不确定的。static变量会自动初始化0为适当的类型。

当您在数组定义中省略初始值设定项时,这些元素将设置为零:

int foo[3] = { 0 };     // foo[0] = 0, foo[1] = 0, foo[2] = 0
int bar[3] = { 1, 2 };  // bar[0] = 1, bar[1] = 2, bar[2] = 0

推荐阅读