1.打印菱形 2. 字符串逆序输出 3. 解释栈区存放原理 day (10)
2021/11/15 23:10:32
本文主要是介绍1.打印菱形 2. 字符串逆序输出 3. 解释栈区存放原理 day (10),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. int main()
{
int a = 0;
scanf("%d", &a);//输入要打印菱形的大小
for (int i = 0; i < a; i++)
{
int j = 0;
for (j = 0; j <a-i-1; j++)
{
printf(" ");
}
for (j = 0; j <(2*i)+1; j++)
{
printf("*");
}
printf("\n");
}
for (int i = 0; i <a-1; i++)
{
int j = 0;
for (j = 0; j<i+1;j++)
{
printf(" ");
}
for (j = 0; j <(2*(a-1-i))-1; j++)
{
printf("*");
}
printf("\n");
}
system("pause");
return 0;
}
注意 输入的是菱形的一半:
2 字符串逆序输出 void reverse(char* arr)
{
unsigned int len = strlen(arr);
char* left = arr;
char* right = arr+len - 1; //注意一定是arr+len -1; 如果没有arr 地址就不对了 不能知道末端了; 注意也不能写成 int *left 要跟arr 对应 都是char 写成int * 一次跳过四个字节
while (left <= right)
{
int tmp = 0;
tmp = *right;
*right = *left;
*left = tmp;
right--;
left++;
}
}
int main()
{
char arr[50] = { 0 };
gets(arr); //gets的作用是将键盘输入的字符串传递给arr 注意是gets 不要写成fgets
reverse(arr);//字符串逆序
printf("%s ", arr);
//补充一个知识点 int*arr[10] 是指针数组 里面的每一个元素放的地址 int(*arr)[10]就是
//数组指针数组指针,指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。例:int (*p)[10]; p即为指向数组的指针,又称数组指针。
system("pause");
return 0;
}
**********下面用一个加法运算解释关于栈区的一些知识:
1.摁住f10 右击 转到反汇编
首先要明白 main 函数也是被调用的 调用顺序位
main CRT Start up;
--main CRT Start up;
main 所以栈区先创建上述两个空间
接着创建main函数的
接着明白ebp esp ebp栈底 esp 栈顶 push 是压栈的动作 mov ebp.esp 是将esp的内容传递给ebp 想象一下此时会发生什 接着连续3个push ebx esi edi 记住他们可都是就寄存器 对电脑来说 内存 硬盘 寄存器 存放 还有一个lea 全名 load effective address 接着将显示符号名字去掉
这里还有一个知识点 就是 栈区使用的时候 先使用高地址 后使用低地址 这个肯定都知道吧 并且数组是从低到高的 所以那个ebp-24h(24h16进制) 就是从ebp往后走一段空间 并且这些空间会被接下来的0cccca初始化
还有一点就是dword 是doubleword 一个word 两个字节 既然double 就是4个啦呗
f11进入函数内部后 原理一样
总之调试之后应该明白 形参跟实参的关系 改变形参不会改变实参 他们只是值相同 址根本不同 (临时引用)并且指定 a跟b 是从右往左放入的 先放入b后放入a 还有一点就是 a b 不是创建在add函数里面 main 函数及创建了
这篇关于1.打印菱形 2. 字符串逆序输出 3. 解释栈区存放原理 day (10)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南