C语言指针-2

int main()
//{
//	char ch = 'w';
//	char* p = &ch;
//	*p = 'a';
//	printf("%c ", ch);
//	return 0;
//}
//
//int main()
//{
//	const char* ch = "abc";
//	printf("%s\n", ch);
//	return 0;
//}
//
//
//int main()
//{
//	char str1[] = "hello bit.";
//	char str2[] = "hello bit.";
//	const char* str3 = "hello bit.";
//	const char* str4 = "hello bit.";
//	if (str1 == str2)
//		printf("str1 and str2 are same\n");
//	else
//		printf("str1 and str2 are not same\n");//打印
//
//	if (str3 == str4)
//		printf("str3 and str4 are same\n");//打印
//	else
//		printf("str3 and str4 are not same\n");
//
//	return 0;
//}
//
//int main()
//{
//	int a = 0;
//	printf("%d\n", a);
//	char ch = 'w';
//	printf("%c\n", ch);
//	char* num = "abc";
//	printf("%s\n", num);
//	char arr[] = "def";
//	printf("%s\n", arr);
//	return 0;
//}
//
//
//int main()
//{
//	int* p1[10];//指针数组,指针数组是⼀种数组,数组中存放的是地址(指针)。
//	int(*p2)[10];//数组指针变量应该是:存放的应该是数组的地址,能够指向数组的指针变量。
//	return 0;
//}
//
//
//int main()
//{
//	int arr1[10] = { 10 };
//	int arr2[10] = { 2 };
//
//
//	int* p1 = &arr1;//指针数组,初始化
//
//	int(*p2) = &arr2;//数组指针,初始化
//
//	printf("%d\n", *arr1);
//	printf("%d\n", *arr2);
//	return 0;
//}
//
//int main()
//{
//	int* ptr = NULL;//空指针
//	*ptr = 10;//nullprt(空指针)
//	printf("%d ", ptr);
//	return 0;
//}
//
//
//int main()
//{
//	int a = 10;
//	int* p = &a;
//	if (p != NULL)
//	{
//		//使用p
//	}
//	return 0;
//}
//
//
//&arr[0]-数组首元素地址
//&arr-数组名也代表首元素地址
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* p = &arr;
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *p);
//		p++;
//	}
//	在这里继续使用p的话p就是野指针
//	//p = NULL;
//	
//	.....
//	//p = arr;
//	//if (p != NULL)
//	//{
//	//	//使用p
//	//}
//	return 0;
//}
//
//
//int* test()//所以是int *类型
//{
//	//局部变量
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
//
//	//....
//
//	return arr;//返回arr地址
//}
//int main()
//{
//	int* p = test();
//	//p就是野指针
//	return 0;
//}
//
//#define NDEBUG//assert开关
//#include<assert.h>
//
//int main()
//{
//	int a = 10;
//	//int* p = &a;
//	int* p = NULL;
//	//assert() 宏接受⼀个表达式作为参数。如果该表达式为真(返回值⾮零), assert() 不会产⽣
//	//	任何作⽤,程序继续运⾏。如果该表达式为假(返回值为零), assert() 就会报错,在标准错误
//	//	流 stderr 中写⼊⼀条错误信息,显⽰没有通过的表达式,以及包含这个表达式的⽂件名和⾏号。
//	assert(p != NULL); //如果是NULL直接报错(用来排查问题)
//
//	return 0;
//}
//
//
//#include<math.h>
//
//void Swap(int x, int y)
//{
//	int z = x;
//	x = y;
//	y = z;
//}
//int main()
//{
//	int a = 10;
//	int b = 20;
//	printf("交换前a = %d, b =  %d\n", a, b);
//	//传值调用,函数的实参传递给型参后,形参是实参的临时拷贝,形参有自己独立的空间
//	//所以对形参的修改不能影响实参
//	Swap(a, b);
//	printf("交换后a = %d, b =  %d\n", a, b);
//	return 0;
//
//}
//
//	
//void Swap(int* x, int* y)
//{
//	int z = *x;
//	*x = *y;
//	*y = z;
//}
//int main()
//{
//	int a = 10;
//	int b = 20;
//	printf("交换前a = %d, b =  %d\n", a, b);
//	//传址调用
//	Swap(&a, &b);
//	printf("交换后a = %d, b =  %d\n", a, b);
//	return 0;
//}
//
//
//int Max(int x, int y)
//{
//	if (x > y)
//	{
//		return x;
//	}
//	else
//		return y;
//}
//int main()
//{
//	int a = 100;
//	int b = 20;
//
//	//传值调用
//	int m = Max(a, b);
//	printf("%d ", m);
//	return 0;
//}
//
//
//健壮性/鲁棒性
//
//size_t 无符号整形
//size_t my_stelen(const char *str)//不能修改
//{
//	int count = 0;
//	assert(str != NULL);//确保了指针的有效性
//	while (*str != '\0')
//	{
//		count++;
//		str++;
//	}
//	return count;
//}
//int main()
//{
//	char arr[] = "hello hongyang";
//	size_t len = my_stelen(arr);
//	printf("%zd\n", len);
//	return 0;
//}
//
//
//
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
//	printf("%p\n", &arr[0]);
//	printf("%p\n", arr);
//	//数组名就是数组首元素地址
//	//但是有2个例外
//	//1.sizeof(数组名),这里的数组名表示整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节
//	// 2. &数组名,这里的数组名表示整个数组,&数组名:去出的是整个数组的地址
//	//除此之外遇到的所有的数组名都属数组元素的首地址
//
//	return 0;
//}
//
//int main()
//{
//
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
//	printf("&arr[0]   = %p\n", &arr[0]);
//	printf("&arr[0]+1 = %p\n", &arr[0]+1);
//
//
//	printf("arr   = %p\n", arr);
//	printf("arr+1 = %p\n", arr+1);
//
//	printf("&arr   = %p\n", &arr);
//	printf("&ar+1r = %p\n", &arr+1);
//	return 0;
//}
//
//
//int main()
//{
//	int arr[10] = { 0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int i = 0;
//	//输入
//	int* p = arr;
//	for (i = 0; i < sz; i++)
//	{
//		scanf("%d", p++);
//	}
//	p = arr;
//	//输出
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *(p + i));
//	}
//	return 0;
//}
//
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
//	int* p = arr;
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (i = 0; i < sz; i++)
//	{
//		//printf("%d ", *(p + i));
//		//printf("%d ", *(arr + i));
//		//printf("%d ", arr[i]);
//		
//		//printf("%d ", p[i]);
//		printf("%d ", *(i + arr));
//		
//		//arr[i] == *(arr+i)
//		//*(p+i) == p[i]
//
//		//arr[i] == *(arr+i) == *(i+arr) == i[arr]
//		// //不推荐这种写法
//		//printf("%d ", i[arr]);
//	}
//	return 0;
//}
//
//
//
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
//	int* p = arr;
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (i = 0; i < sz; i++)
//	{
//		printf("%p ============= %p\n", p + i, &arr[i]);
//	}
//	return 0;
//}
//
//
//
//void print(int str[])
//{
//	int i = 0;
//	int sz = sizeof(str) / sizeof(str[0]);//得不到数组元素的个数
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", str[i]);
//	}
//}
//int main()
//{
//
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
//	
//	print(arr);//打印arr数组的内容
//	//arr就是数组首元素的地址
//	return 0;
//}
//
//
//
//
//void print(int* p)
//{
//	//     4               4
//	int sz = sizeof(p) / sizeof(p);
//}
//int main()
//{
//
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
//	print(arr);//打印arr数组的内容
//	//arr就是数组首元素的地址
//	return 0;
//}
//
//
//void print(int str[],int sz)
//{
//	int i = 0;
//	//int sz = sizeof(str) / sizeof(str[0]);//得不到数组元素的个数
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", str[i]);
//	}
//}
//int main()
//{
//
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	print(arr,sz);//打印arr数组的内容
//	//arr就是数组首元素的地址
//	return 0;
//}
//
//
//
//冒泡排序
//核心思想:两两相邻的数字进行比较
//
//void sort(int str[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz-1; i++)
//	{
//		//一趟冒泡排序
//		int flag = 1;//假设数组是有序的
//		int j = 0;
//		for (j = 0; j < sz-1 -i; j++)
//		{
//			//升序
//			if (*(str+j) > str[j + 1])
//			{
//				//交换
//				int tmp = str[j];
//				str[j] = str[j+1];
//				str[j+1] = tmp;
//				flag = 0;//不是有序的
//			}
//		}
//		if (flag == 1)//是有序的,直接跳出循环
//		{
//			break;
//		}
//	}
//	
//}
//
//void print(int* str, int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *str);
//		str++;
//	}
//}
//
//int main()
//{
//	//int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
//	int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	sort(arr,sz);
//	print(arr, sz);
//	return 0;
//}
//
//
//#include <stdio.h>
//
//int Count(int* str[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *(str + i));
//	}
//}
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	Count(arr, sz);
//	return 0;
//}
//
//
//void Count(int* arr[],int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz - 1; i++)
//	{
//		//假设是升序
//		int flag = 1;
//		//一趟冒泡排序
//		int j = 0;
//		for (j = 0; j < sz - 1 - i; j++)
//		{
//			if (arr[j] > arr[j + 1])
//			{
//				int tmp = arr[j+1];
//				arr[j + 1] = arr[j];
//				arr[j] = tmp;
//				flag = 0;
//			}
//		}
//		if (flag == 1)
//		{
//			break;
//		}
//	}
//}
//
//void print(int* str,int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *str);
//		str++;
//	}
//}
//
//int main()
//{
//	int arr[10] = { 10,9,8,7,6,5,4,3,2,1 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	Count(arr, sz);
//	print(arr, sz);
//	return 0;
//}
//
//
//void Count(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		//奇数
//		if (arr[i] % 2 == 0)
//		{
//			int j = 0;
//			for (j = i+1; j < sz; j++)
//			{
//				if (arr[j]%2==1)
//				{
//					//交换顺序
//					int tmp = arr[i];
//					arr[i] = arr[j];
//					arr[j] = tmp;
//				}
//			}
//		}
//	}
//}
//
//void print(int* str, int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *str);
//		str++;
//	}
//}
//
//int main()
//{
//	int arr[10] = { 10,9,8,7,6,5,4,3,2,1 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	Count(arr, sz);
//	print(arr, sz);
//	return 0;
//}
//
//int main()
//{
//	int a = 10;
//	int* p = &a;
//	//a是整型变量,占用4个字节的空间,a是有自己的地址,&a就是拿到的就是a所占4个字节的第一个字节的地址
//	//p是指针变量,占用4/8个字节空间,p也是有自己的地址,&p就是拿到了p的地址
//
//	int** pp = &p;
//	//pp是指针变量,pp是二级指针变量
//
//	int*** ppp = &pp;
//	//ppp也是指针变量,ppp是三级指针变量
//
//	return 0;
//}
//
//
//指针数组:存放指针的数组
//
//
//int main()
//{
//	int a = 10;
//	int b = 20;
//	int c = 30;
//	int* p[] = { &a,&b,&c };
//	int i = 0;
//	for (i = 0; i < 3; i++)
//	{
//		printf("%d ", *(p[i]));
//	}
//	return 0;
//}
//
//
//
//int main()
//{
//	int arr1[] = { 1,2,3,4,5 };
//	int arr2[] = { 2,3,4,5,6 };
//	int arr3[] = { 3,4,5,6,7 };
//
//	int* p[] = { arr1,arr2,arr3 };
//
//	int i = 0;
//	for (i = 0; i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			//printf("%d ", p[i][j]);
//			//p[i] == *(p+i)
//			printf("%d ", *(*(p + i) + j));
//			//p[i][j] == *(*(p + i) + j)
//		}
//		printf("\n");
//	}
//	return 0;
//}
相关推荐
武子康8 分钟前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
若亦_Royi9 分钟前
C++ 的大括号的用法合集
开发语言·c++
Captain823Jack42 分钟前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
资源补给站1 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
豪宇刘1 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意1 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
Captain823Jack1 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
m0_748247551 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
6.942 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala
Aileen_0v02 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper