c - c中的int指针和char指针有区别吗?
问题描述
我是 C 新手,无法理解指针。我感到困惑的部分是关于char *
and int *
。
比如我们可以直接给char赋值一个指针,比如
char *c = "c";
它不会出错。
但是,如果我像刚才那样为 int 分配一个指针,例如int * a = 10;
,
它会出错。我需要在内存中腾出一个额外的空间来为 int 分配一个指针,
像int *b = malloc(sizeof(int)); *b = 20; free(b);
...
谁能告诉我为什么?
解决方案
我认为您误解了指针是什么以及它的含义。在这种情况下:
int* a = 10;
您说的是“创建一个指针(指向 an int
)并将其指向文字内存位置0x0000000A
(10)。
这和这个不一样:
int n = 10;
int* a = &n;
这是“创建一个指针(指向一个int
)并将其指向n
.
如果你想动态分配这个:
int* a = malloc(sizeof(int));
*a = 10;
翻译为“创建一个指针(指向一个int
)并将其瞄准刚刚分配的内存块,然后将value分配给该位置10
。
通常你永远不会分配一个int
,你会为一个数组分配一堆,在这种情况下你会把它称为a[0]
througha[n-1]
一个 size 的数组n
。在 C*(x + y)
中,通常与 或 相同,x[y]
换句话说*(x + 0)
,就是*x
或x[0]
。
推荐阅读
- javascript - 我必须单击按钮两次才能在 React 中正确呈现状态
- php - 如何制作禁用按钮的会话计时器
- ajax - 我们可以使用 document.domain 将请求源标头更改为其父域吗?
- java - JavaMail 按主题搜索某些子字符串失败
- python - 带有标签和特征的 PySpark Row 与 LabeledPoint
- hadoop-yarn - 尽管资源分配,纱线应用程序已接受但未运行 cloudera
- tensorflow - Keras 网络未训练
- html - 如何将htmlTable从查看器导出到R中的word文档
- python-3.x - TensorFlow、Python、对象检测 API、Google Colab
- swift - 如何使用 AWSMobileClient 自定义插入式 UI?