第一部分 基本数据类型
1.int
1> long int、long:8个字节 %ld
2> short int、short:2个字节 %d %i
3> unsigned int、unsigned:4个字节 %zd
4> signed int、signed、int:4个字节 %d %i
2.float\double
1> float :4个字节 %f
2> double:8个字节 %f
3.char
1> 1个字节 %c %d,输出字符串用%s
2> char类型保存在内存中的是它的ASCII值
'A' --> 65
第二部分 构造类型
1.数组
1> 只能由同一种类型的数据组成
2> 定义:数据类型 数组名[元素个数];
数组容易犯的错误总结:
// 使用注意
// 都是正确写法
//int ages[5] = {10 , 11, 12, 67, 56};
//int ages[5] = {10, 11};
//int ages[5] = {[3] = 10, [4] = 11};
//int ages[] = {10, 11, 14};
// 错误写法
// int ages[];
// 错误写法
/* 只能在定义数组的同时进行初始化
int ages[5];
ages = {10, 11, 12, 14};
*/
// 正确写法
// int ages['A'-50] = {10, 11, 12, 14, 16};
//int size = sizeof(ages);
//printf("%d\n", size);
// 正确写法
/*
int count = 5;
int ages[count];
ages[0] = 10;
ages[1] = 11;
ages[2] = 18;
*/
//printf();
// 错误写法
// 如果想再定义数组的同事进行初始化,数组元素个数必须是常量,或者不写
//int ages[count] = {10, 11, 12};
2.结构体
1> 可以由不同类型的数据组成
2> 先定义类型,再利用类型定义变量
结构体需要注意的几点:
1.定义结构体变量的3种方式
1> 先定义类型,再定义变量(分开定义)
struct Student
{
int age;
};
struct Student stu;
2> 定义类型的同时定义变量
struct Student
{
int age;
} stu;
struct Student stu2;
3> 定义类型的同时定义变量(省略了类型名称)
struct
{
int age;
} stu;
2.结构体类型的作用域
1> 定义在函数外面:全局有效(从定义类型的那行开始,一直到文件结尾)
2> 定义在函数(代码块)内部:局部有效(从定义类型的那行开始,一直到代码块结束)
第三部分 指针类型
1.变量的定义
int *p;
// 变量类型 变量名;
// 格式:变量类型 *变量名;
// 定义了一个指针变量p
// 指针变量只能存储地址
// 指针就一个作用:能够根据一个地址值,访问对应的存储空间
// 指针变量p前面的int:指针变量p只能指向int类型的数据
2.间接操作变量的值
int a = 10;
p = &a;
*p = 20;
3.指向结构体的指针的定义:
struct Student *p;
利用指针访问结构体的成员
1> (*p).成员名称
2> p->成员名称
4.指针的使用注意:
#include <stdio.h>
int main()
{
/* 不建议的写法, int *p只能指向int类型的数据
int *p;
double d = 10.0;
p = &d;*/
/* 指针变量只能存储地址
int *p;
p = 200;
*/
/* 指针变量未经过初始化,不要拿来间接访问其他存储空间
int *p;
printf("%d\n", *p);
*/
int a = 10;
/*
int a;
a = 10;
*/
/*
int *p;
p = &a;
*/
// 定义变量时的*仅仅是一个象征,没有其他特殊含义
int *p = &a;
// 不正确的写法
// *p = &a;
p = &a;
// 这个时候的*的作用:访问指向变量p指向的存储空间
*p = 20;
char c = 'A';
char *cp = &c;
*cp = 'D';
printf("%c\n", c);
return 0;
}
#include <stdio.h>
/*
1.数组元素的访问方式
int ages[5];
int *p;
p = ages;
1> 数组名[下标] ages[i]
2> 指针变量名[下标] p[i]
3> *(p + i)
2.指针变量+1,地址值究竟加多少,取决于指针的类型
int * 4
char * 1
double * 8
*/
void change(int array[]);
int main()
{
// 20个字节
int ages[5] = {10, 11, 19, 78, 67};
change(ages);
return 0;
}
// 利用一个指针来接收一个数组,指针变量array指向了数组的首元素
void change(int *array)
{
printf("%d\n", array[2]);
//printf("%d\n", *(array+2));
}
/*
void change(int array[])
{
int s = sizeof(array);
printf("%d\n", s);
}*/
void test()
{
double d = 10.8;
double *dp;
dp = &d;
printf("dp = %p\n", dp);
printf("dp + 1 = %p\n", dp + 1);
int ages[5] = {10, 9, 8, 67, 56};
int *p;
// 指针变量p指向了数组的首元素
p = &ages[0];
// 数组名就是数组的地址,也是数组首元素的地址
//p = ages;
/*
p ---> &ages[0]
p + 1 ---> &ages[1]
p + 2 ---> &ages[2]
p + i ---> &ages[i]
*/
//printf("%d\n", *(p+2));
printf("%d\n", p[2]);
/*
for (int i = 0; i<5; i++) {
printf("ages[%d] = %d\n", i, *(p+i));
}*/
// printf("%p\n", p);
// printf("%p\n", p + 1);
// printf("%p\n", p + 2);
}
char *name = "itcast";
* 特点:字符串其实是一个常量字符串,里面的字符是不能修改
* 使用场合:字符串的内容不需要修改,而且这个字符串经常使用
第四部分 枚举类型
使用场合:当一个变量只允许有几个固定取值时
1
2
3
4
5
6
|
enum
weekday{sun,mon,tue,wed,thu,fri,sat};
enum
weekday a,b,c;
//或者为:
enum
weekday{sun,mon,tue,wed,thu,fri,sat}a,b,c;
//或者为:
enum
{sun,mon,tue,wed,thu,fri,sat}a,b,c;
|