C语言学习笔记

153 阅读3分钟

「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」。​

#define常量和宏

//函数的实现
int MAX(int x, int y)
{
	if (x > y)
		return x;
	else
		return y;
}
//宏的定义
#define MAX(X,Y) (X>Y?X:Y)
int main(void)
{
	//int a = MAX;
	int a = 10;
	int b = 20;
	//函数
	int max = MAX(a, b);
	printf("max = %d\n", max);
	//宏的方式
	max = MAX(a, b);
	//max = (a>b?a:b);
	printf("max = %d\n", max);
	return 0;
}

8.指针

int main(void)
{
	int a = 10;//四个字节
	int* p = &a;//取地址
	printf("%p\n", &a);
	printf("%p\n", p);
	//* - 解引用操作符
	return 0;
}

指针大小在32位平台上为4个字节,在64位平台是8个字节

9.结构体

//创建一个结构体类型
struct Book
{
	char name[20];//C语言程序设计
	short price;//55
};
int main(void)
{
	//利用结构体类型-创建一个额该类型的结构体变量
	struct Book b1 = { "C语言程序设计",55 };
	printf("书名:%s\n", b1.name);
	printf("价格:%d\n", b1.price);
	b1.price = 15;
	printf("修改后的价格:%d\n", b1.price);
	return 0;
}

struct Book
{
	char name[20];//C语言程序设计
	short price;//55
};
int main(void)
{
	//利用结构体类型-创建一个额该类型的结构体变量
	struct Book b1 = { "C语言程序设计",55 };
	struct Book* pb = &b1;
	//利用pb打印出我的书名和价格
	//.   结构体变量.成员
	//->  结构体指针->成员
	printf("%s\n", pb->name);
	printf("%d\n", pb->price);
	/*printf("书名:%s\n", b1.name);
	printf("价格:%d\n", b1.price);
	b1.price = 15;
	printf("修改后的价格:%d\n", b1.price);*/
	return 0;
}

\

数组

一维数组的创建与初始化

数组是一组相同类型元素的集合

int main() { //创建一个数组——存放整形——10个 int arr[10]; return 0; } 注:数组的创建中,[ ]中一定要给一个常量,不可以使用变量。

int main() { //创建一个数组——存放整形——10个 int arr[10] = {1,2,3};//不完全初始化,剩下的元素默认初始化为0 char arr2[5] = { 'a',98};//b的ASCII值为98 char arr3[] = "abcdef"; printf("%d\n", sizeof(arr3));//7 //sizeof计算arr3所占空间的大小 printf("%d\n", strlen(arr3));//6 //strlen 求字符串长度(找\0,且只算\0之前的字符个数,\0不算) return 0; } 注:

1.strlen和sizeof没有关联

2.strlen 是求字符串长度的——只能针对字符串长度要求 ——库函数——使用得引用头文件

3.sizeof 计算变量、数组、类型的大小-——单位是字节——操作符

int main() {

char arr1[] = "abc";//abc\0
char arr2[] = { 'a','b','c' };//a b c
printf("%d\n", sizeof(arr1));//4
printf("%d\n", sizeof(arr2));//3
printf("%d\n", strlen(arr1));//3
printf("%d\n", strlen(arr2));//随机值

} 一堆数组的使用

用[ ],下标引用操作符就可以实现数组访问

int main() { char arr[] = "abcdef";//[a][b][c][d][e][f][\0] int i = 0; for (i = 0; i < 6; i++)// (i = 0; i < (int) strlen(arr); i++) { printf("%c ", arr[i]); } return 0; }

int main() { char arr[] = "abcdef";//[a][b][c][d][e][f][\0] int sz = sizeof(arr) / sizeof(arr[0]); int i = 0; for (i = 0; i <sz; i++) { printf("%d ", arr[i]); } return 0; } 注:

1.数组用下标访问,下标从0开始 :[0]

2.数组的大小可以通过计算得到

int arr[10]
int sz = sizeof(arr) / sizeof(arr[0]);

一堆数组在内存中的存储 int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int sz = sizeof(arr) / sizeof(arr[0]); int i = 0; for (i = 0; i < sz; i++) { printf("&arr[%d] = %p\n", i, &arr[1]); } return 0; } 数组在内存中是连续存放的