c - 默认情况下,C 中的基本数据类型是可变的还是不可变的?

标签 c variables types

我在 C#、java 中找到了很多关于数据类型可变性的信息……但是纯 C 呢?

例如,是 int默认情况下在 C 中不可变?

例如,查看以下代码示例:

#include <stdio.h>

int main()
{
  int a,b,c;
  b=0;
  c=0;
  a=b+c;
  b=1;
  c=2;

  printf("1st time %d\n",a);//gives out 0
  c=3;
  printf("2nd time %d",a);//gives out 0
  return 0;
}

上面的代码显示一个普通的int是不可变的,对吗?

最佳答案

[I]s int mutable in C?
简短的回答:是的!

如果您问是否可以改变 C 中的任何内存位置,答案是肯定的。 (有时会带来危险的后果!)虽然可以设计一个无法通过您为其创建的 API 直接改变的数据结构,但您几乎可以覆盖纯 C 中的任何内存位置。

难怪有人喜欢,有人不喜欢。

编辑

引用 Roger 上面的评论:

#include<stdio.h>

int main (int argc, char *argv[]) {
    const int n = 1;
    int *m = &n;
    *m = 10;
    printf ("%d\n", n); /* prints 10 */
    return 0;
}

所以,是的,甚至可以覆盖 const int 的内存位置。 s。

关于c - 默认情况下,C 中的基本数据类型是可变的还是不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16849952/

相关文章:

c - 如何从 ps 中隐藏 execl() 参数?

c - 如何将二进制字符串转换为无符号整数?

c - 如何在变量中获取curl输出?

c - 关于在 C 中使用扩展符号将 char 转换为 int

java - 以 HH :MM (Not time) 的形式存储数值

c - 将 bool 字段添加到结构时出现语法错误( ‘:’ 标记之前应为 ‘,’ 、 ‘;’ 、 ‘}’ 、 ‘__attribute__’ 或 ‘=’ )

c - 严格混叠警告和tcpdump示例代码

c - 未找到静态字符数组且无法与 strncpy 一起使用?

javascript - 为什么多维数组只在每个单元格上执行函数?

sql - 复合类型的多个插入