【发布时间】:2017-09-06 09:03:56
【问题描述】:
我一直在写类似的东西
char *x=NULL;
假设
char *x=2;
将创建一个指向地址 2 的 char 指针。
但是,在The GNU C Programming Tutorial 中,它说int *my_int_ptr = 2; 在分配时将整数值2 存储到my_int_ptr 中的任何随机地址。
这似乎意味着我自己的char *x=NULL 正在将NULL 转换为char 的值分配给内存中的某个随机地址。
虽然
#include <stdlib.h>
#include <stdio.h>
int main()
{
char *x=NULL;
if (x==NULL)
printf("is NULL\n");
return EXIT_SUCCESS;
}
确实会打印
为空
当我编译和运行它时,我担心我依赖于未定义的行为,或者至少是未指定的行为,我应该写
char *x;
x=NULL;
改为。
【问题讨论】:
-
int *x = whatever;和int *x; *x = whatever;之间的区别非常令人困惑。int *x = whatever;实际上的行为类似于int *x; x = whatever;,而不是*x = whatever;。 -
本教程似乎把这种令人困惑的区别弄错了。
-
网络上有那么多烂教程!立即停止阅读。我们真的需要一个这样的黑名单,我们可以公开羞辱蹩脚的书......
-
@MM 这并没有让它在 2017 年变得不那么糟糕。鉴于 80 年代以来编译器和计算机的发展,这基本上就像我是一名医生并阅读医学书籍一样在 18 世纪。
-
我认为本教程不符合“The GNU C 编程教程”...
标签: c pointers initialization