1.数据类型,int,short,long的统一占位符级别都可以使用%d
- 有符号的数据类型
默认定义的变量或者是signed修饰的就是有符号的
// 默认定义的变量,就是有符号的
int age = 99;
printf("age = %d\n", age);
short age2 = 80;
printf("age2 = %hd \n", age2);
long number = 123445;
printf("number = %ld\n", number);
char sex = 'M';
printf("sex = %c", sex);
- 无符号的数据类型
unsigned修饰的是无符号的
//unsigned修饰的是无符号的
unsigned int age = 99; //4个字节
printf("age = %u,占用字节数=%d\n", age, sizeof(age));
unsigned short age2 = 80; //2个字节
printf("age2 = %hu,占用字节数=%d \n", age2, sizeof(age2));
unsigned long number = 123445; //4个字节,java中是8个字节
printf("number = %lu,占用字节数=%d\n", number, sizeof(number));
unsigned char sex = 'M'; //1个字节
printf("sex = %c,占用字节数=%d", sex, sizeof(sex));
//这个可以修改字节数
long long number2 = 123445; //8个字节 相当于java中的Long
printf("number = %lu,占用字节数=%d\n", number, sizeof(number2));
- 区别
最大的区别是取值范围不一样,占位符也不一样,但是所占字节数一样
- long 和int 都是4个字节,为何?
答: long类型和int类型,在早起16位电脑的时候,int是2个字节,long是4个字节,但是经过发展,电脑已经成了32位或者64位,就导致了int 和long 都是4位字节了。
在C99的标准中,long最小要为int的占用字节数
- 布尔类型
C99的标准中,非0是true,其他是false
- 浮点型
float 字节-4个字节,精度-6位小数,占位符-%f
double 字节-8字节,精度-15位小数,占位符-%lf
long double 字节-8字节,精度-19位小数,占位符-%Lf,但是使用printf的时候需要加 #define __USE_MINGW_ANSI_STDIO 1 于 #include <stdio.h> 之前,否则会打印出0.00
- 字符串
字符串有3种写法 ,*代表是指针,*可以在不同的位置,一个*代表一级指针,2个*代表2级指针,以此类推,一般很少有4位以上的。
char *str = "这是字符串"; 这种写法是标准
char * str = "这是字符串";
char* str = "这是字符串";
- 数组
1 . 必须把[ ]放在变量前面 ,(int[] test这是错误的写法)。
2 . 必须给定存储的空间或者直接初始化 ,int test[8] 或者int test[] ={1,2,3,4};
3 . 数组的内存地址和数组的首位数据的内存地址一致
int test[] = {1, 3, 2, 47, 51};
printf("数组长度: %d\n", sizeof(test));
for (int i = 0; i < (sizeof(test) / sizeof(int)); ++i) {
// * 是取出内存地址中的值 ,数组是一块连续的内存空间
// printf("test的内容: %d\n", *(test + i));
//传统方式
// printf("test的内容: %d\n", test[i]);
// 数组的内存地址的占位符 %x ,#代表以16位进制展示
printf("test的内存地址: %#x\n", test+i);
}
输出结果:
test的内存地址: 0x61fe00
test的内存地址: 0x61fe04
test的内存地址: 0x61fe08
test的内存地址: 0x61fe0c
test的内存地址: 0x61fe10
- 动态申请内存
1 .动态申请的内存在堆中,其他的是在栈区中。
2 .如果是大空间的使用,就需要在堆中,否则一般都是在栈中
int *p1; //悬空指针 ,这样定义的是在栈区
// 动态申请的时候,内部会检测,是否还有可用的内存。可能会拿到其他东西剩下的内存,可能会有值,所以要清空
int *p3 = calloc(10, sizeof(int));//堆中申请的
//初始化 清空,防止有脏数据
memset(p3, NULL, 10 * sizeof(int));
//释放 ,否则不会回收
free(p3);
// 释放之后 p3此时是个野指针
p3 = 0; //置位0,NULL就是0
- C和C++的区别?
1 . C是面向过程的,一个一个的函数,没有类,没有面向对象
2 . C++是面向对象的,思想和java一样
网友评论