C语言NULL了解

【FROM MSDN &&百科】

NULL指针

NULL is the null-pointer value used with many pointer operations and functions. It is equivalent to 0.NULL is defined in the following header files: CRTDBG.H, LOCALE.H, STDDEF.H, STDIO.H, STDLIB.H, STRING.H, TCHAR.H, TIME.H and WCHAR.H.

  #ifndef NULL
  #ifdef __cplusplus
  #define NULL 0
  #else
  #define NULL ((void *)0)
  #endif
  #endif

	printf("%d\n",sizeof(NULL));
NULL指针的长度为4,32位系统下指针的地址值占4字节。

一个指针拥有两种属性:地址值和指针类型。两者的作用是

1,地址值标识变量的首地址(32位系统下指针的地址值占4字节);

2,指针类型告诉编译器,应该怎样进行接下来的数据访问(int型数组和float型数组是不同的;数组访问与结构体访问也是不同的;等等)。


事实上NULL不是C语言中的关键字;把一个指针赋值为NULL,通常的说法是“将指针悬空”。

NULL字符

在ASCII码的第一个字符是NULL,它的数值是0,占用1字节;C语言把它作为字符串的最后一个字符,以表示字符串到此结束."\0"

用下面的DEMO测试一下看结果:

	char a;
	printf("%d\n",sizeof('\0'));           //4
	printf("%d\n",sizeof("\0"));           //2
	printf("%d\n",sizeof((char)('\0')));   //1
	printf("%d\n",sizeof(a));              //1

sizeof('\0')的结果竟然是4,由于单个字符被看作字符的ASCII编码,被编译器展开成为数值类型int。不知道这个“可以理解成“char类型在内存中是以int数据类型存储”吗?”

sizeof("\0");//转义字符占一个字节,再加上字符串结束符

你可能感兴趣的:(Basic,knowledge,of,C)