#define _CRT_SECURE_NO_WARNINGS
#include
//int my_strlen(char* arr)
//{
// char* start = arr;
// while (*arr != '\0')
// {
// arr++;
// }
// return arr - start;
//}
//int main()
//{
// int len = my_strlen("djfaifjrj");
// printf("%d", len);
// return 0;
//}
//int main()
//{
// int arr[10] = { 0 };
// int i = 0;
// int* p = arr;
// int sz = sizeof(arr) / sizeof(arr[0]);
// for (i = 0; i < sz;i++)
// {
// printf("%d ", *(p + i));
// }
// return 0;
//}
//
二级指针
//int main()
//{
// int a = 10;
// int* pa = &a;
//
// int** ppa = &pa;//ppa来存放pa的地址,ppa是二级指针变量
// **ppa = 20;
// printf("%d\n", a);
// return 0;
//}
指针数组
——就是存放指针的数组
//int main()
//{
// int a = 10;
// int b = 20;
// int c = 30;
// int arr[10];
// int *pa = &a;
// int* pb = &b;
// int* pc = &c;
// int* parr[10] = { &a,&b,&c };
// int i = 0;//这个数组每个元素都是整型指针
// for (i = 0;i < 3;i++)
// {
// printf("%d ", *(parr[i]));
// }
// return 0;
//}
//指针数组可以实现模拟二维数组
int main()
{
int arr1[4] = {1,2,3,4};
int arr2[4] = {1,2,6,7};
int arr3[4] = {4,7,3,4};
int* parr[3] = { arr1,arr2,arr3 };
int i = 0;
for (i = 0;i < 3;i++)
{
int j = 0;
for (j = 0;j < 4;j++)
{
printf("%d ", parr[i][j]);
}
printf("\n");
}
return 0;
}
//数据类型详细介绍
//int main()
//{
// //内置类型
// //char//short// int// long // long long// float// double
// //sizeof (long)>=sizeof(int)(取决于平台是32位还是64位平台
// //决定了申请的内存空间大小(大小决定了适用范围)
// //字符的本质是ASCII码值,是整型,属于整型家族
// // int a ---->signed int a
// // char是signed char还是unsigned char取决于编译器,标准是未定义的
// //
// //
// // 构造类型(自定义类型)
// // 结构体类型struct
// // 数组类型
// // 枚举类型
// // 联合类型
// //
// //
// // 指针类型
// //
// //
// // 空类型
// // void通常用于函数返回类型,函数的参数,
// //
// //
// // 一般表示2进制序列的时候为了表示方便,会将每四位二进制序列写为十六进制序列,并在头上加上0x以表示这是二进制序列
// //整数内存里存的是二进制补码
// // 使用补码,将数值位和符号位统一处理
// // 同时加法和减法也会统一处理(CPU只有加法器)
// // 此外,将补码和原码相互转换,其运算过程是相同的,不需要额外的电路
// //
// // 将补码转化为原码也可以取反加一(故运算过程相同)
// //
// //
// //
// // 大小端(实际上存的还是二进制)
// // 【 11 22 33 44 44 33 22 11 】
// // 低地址 高地址
// // 大端字节序存储 小端字节序存储
// // 一个数据高位字节序内容存放在低地址处 高位字节序内容放在高地址处
// // 把低位字节序内容存放在高地址处 低位字节序内容存放在低地址处
// // vs编译器是按小端字节序存储的
// // 对于一个字节的数据没有字节序好谈
// //
// //设计一个程序判断当前机器字节序
// int a = 1;
// //关键就在于大小端存储最低地址的字节一定不同(对于1而言)
// //指针类型决定了解引用访问时访问几个数组
// if (*(char*)&a == 0)
// {
// printf("您的机器是大端存储");
// }
// else
// {
// printf("您的机器是小端存储");
// }
//
// return 0;
//}
//#include
//int main()
//{
// unsigned int i;//没有正负之分,每一位都是有效位
// //i一定>=0
// for (i = 9;i >= 0;i--)
// {
// printf("%u\n", i);
// Sleep(2000);
// }
// return 0;
//}
//10000000000000000000000000000001
//11111111111111111111111111111110
//11111111111111111111111111111111无符号数也要看补码
//char类型元素取值范围是-128~127,unsigned char 的取值范围是0~255
//strlen求字符串长度,关注的是‘\0’前的字符数
//大部分编译器大部分的char都是signed char
//strlen 返回的类型是size_t,是无符号整型
//无符号数减去无符号数得到的是无符号数,将负数看为无符号数的时候会得到一个非常大的值
//一个无符号数与一个有符号数进行运算的时候,会将有符号数转化为无符号数
//浮点型在内存中的存储
// (-1)^s * M * 2^E
// (-1)^s表示符号位,当S= 0,V为整数;当S = 1,V位负数
// M表示有效数字,大于等于1,小于2;
// 2^E表示指数位
//
// 小数点后第一位权重是二的负一次方
//
// M大于等于一,在存的时候,第一位1被舍去,这样就多了一位有效数字,后面补零
//
// 对于E,首先E是一个无符号整数,E为八位时,他的取值范围是0~255,E为十一位时,取值范围是0~2047
// 但是E又可以出现负数,则转入内存时E的真实值必须再加上一个真实值,对于八位的E,这个中间数是127,对于32位的E,这个中间数是1023
//
// 当把E从内存中取出的时候,还分为三种情况
// 1.E不全为零或不为全一
// 指数E得计算值减去127(或者1023),得到真实值,再将M前补1
// 2.E为全零
// 这时,浮点数的指数E等于1-127(或者1-1023),即为真实值
// 有效数字M不再加上第一位的一,而是还原为0.xxxxxx的小数,这样做是为了表示±0
// 3.E为全1,如果这时有效数字M为全零,表示±无穷大
//
//int main()
//{
// float f = 5.5;
// //101.1
// //(-1)^0 * 1.011* 2^2
// //S存0,E存129,M存011
// return 0;
//}
//0 00000000 00000000000000000001001
// E = - 126
// M = 00000000000000000001001
// S = 0
//
// 1001.0
// 1.001*2^3
// S=0,M=1.001,E=3
// 0 10000010 00100000000000000000000
//
//
喝汽水问题
//int main()
//{
// int money = 20;
// int total = 20;
// int empty = total;
// while (empty > 1)
// {
// total += empty/2;
// empty = empty / 2 + empty % 2;
// }
// printf("%d", total);
// return 0;
//}
//对一句话的单词进行逆序,标点不变,单词本身不变
#include
#include
void reverse(char* left, char* right)
{
assert(left);
assert(right);
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[101] = { 0 };
gets_s(arr, 101);
int len = strlen(arr);
reverse(arr, arr + len -1);
char* start = arr;
char* end = start;
while (*start != '\0')
{
while (*end != ' ' && *end != '\0')
{
end++;
}
reverse(start,end-1);
if (*end != '\0')
{
end++;
}
start = end;
}
printf("%s", arr);
return 0;
}