C语言:数据类型


在这里插入图片描述

变量

  1. C语言标识符包括变量、函数名、宏定义、结构体成员名。
  2. C 语言规定中的标识符必须以字母或下划线 _开头,后面可以跟若干个字母、数字、下划线,不能有其它字符。
  3. 关键字不能定义为标识符。

C语言关键字

auto 	break	 case	 char	 const 	continue 	default	 do		double
else 	enum 	 extern	 float	 for 	goto	    if 	     int	long
register return  short   signed  sizeof static      struct   switch typedef
union   unsigned void    volatile while

类型大小

32位操作系统

#include<iostream>

using std::cout;
using std::endl;

int main()
{
	cout <<"char->"<< sizeof(char) << endl;
	cout <<"short->"<< sizeof(short) << endl;
	cout << "int->"<<sizeof(int) << endl;
	cout << "long->"<<sizeof(long) << endl;
	cout <<"long long ->"<< sizeof(long long) << endl;
	cout << "float->"<<sizeof(float) << endl;
	cout << "double->"<<sizeof(double) << endl;
	cout << "long float->"<<sizeof(long float) << endl;
	cout << "long double->"<<sizeof(long double) << endl;
	system("pause");
	return 0;
}
char->1
short->2
int->4
long->4
long long ->8
float->4
double->8
long float->8
long double->8
请按任意键继续. . .

64位操作系统

#include<iostream>

using std::cout;
using std::endl;

int main()
{

    cout <<"char->"<< sizeof(char) << endl;
    cout <<"short->"<< sizeof(short) << endl;
    cout << "int->"<<sizeof(int) << endl;
    cout << "long->"<<sizeof(long) << endl;
    cout <<"long long ->"<< sizeof(long long) << endl;
    cout << "float->"<<sizeof(float) << endl;
    cout << "double->"<<sizeof(double) << endl;
    cout << "long double->"<<sizeof(long double) << endl;
    return 0;
}
char->1
short->2
int->4
long->8
long long ->8
float->4
double->8
long double->16

差别

32位系统long的长度是4,64位系统long的长度是8。
32位系统long float的长度是8,64位操作系统long float是不合法的数据类型。

下面三个字符数组初始化的区别:

char arr1[]="abc"           //'a''b' 'c' '\0'
char arr2[]={'a','b','c'};  //'a''b' 'c' 
char *p="abcdef";           //p的内存中只存了字符a的地址
  • 1、数组在内存中是连续存放的。
  • 2、内存中的一个内存单元(一个字节)对应一个存储地址。
  • 3、指针在32位平台大小是4个字节,64位平台是8个字节。
  • 4、指针可以理解为一个变量,是一个专门用来存放地址的变量。

%l和%lf的区别

C++果然是非常微妙的语言,%f和%lf对于printf()和scanf()的效果是不同的

#include<stdio.h>
int main()
{
    float n;
    scanf("%lf",&n);
    printf("%f",n);
    return 0;
}
80
0.000000

解决办法:1)将”%lf“改为”%f”;2)将float改为double

事实上,对于printf(),无论是%f还是%lf,效果都是一样的。因为,遇到float,printf()会将float类型自动提升到double,所以不会有什么问题。而且严格地讲,printf()并没有对于%lf的定义,虽然很多编译器会接受,所以最好使用%f。
而对于scanf(),由于接受的是指针,并没有类型提升的说法,所以对于double就应该用%lf,float就是%f。

猜你喜欢

转载自blog.csdn.net/Vickers_xiaowei/article/details/89681345