2024年5月2日笔记

内存变量使用之栈区细节说明

	首先在2022年编译器中,X86环境下看这段代码
#include<stdio.h>
	int main()
{
	int i = 0;
	int arr[10] = { 0 };
	for (i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("hehe\n");
	}
	return 0;
}

返回的结果是:
该代码返回的结果
这里要特别强调下,在X86环境下,内存地址在开辟内存空间的时候往往遵循一个规则:根据变量的创建顺序,使用栈区的地址往往是先使用高地址,在使用低地址,这里我们结合代码进入调试模式看看嘿嘿,新手都是这么过来的
111
从这个代码片段来看,&I的值和&arr[12]地址一样,最后在for循环过程中执行到i=12的时候,arr[12]=0,因为地址一样,所以i也会变成0,所以就变成了死循环了
注意,如果在release版本,则会先使用低地址,在使用高地址

const修饰指针变量的位置解释和assert的使用

const好比一把锁,锁住了就不能改变了,这里我们用一级指针来举例子在这里插入代码片

#include<assert.h>
void Change(int* a, int* b)
{
	assert(a);
	assert(b);
	int* z = NULL;
	z = a;
	a = b;
	b = z;
}
int main()
{
	int a = 1;

	int b = 2;
	printf("请输入2个数字\n");
	//用指针交换变量
	Change(&a, &b);

	return 0;

}

这里如果 a和b是NULL空指针,程序是不会提示了,但是如果给了断言assert,则会检测a和b是不是NULL指针,如果是NULL指针就弹出错误提示.
//-----------------------------------------------------------------------------------------------------------------------------
比如intp 如果const 在的左边,比如const int 或者int const ※则表示锁住的是※p也就是说你不能修改p指向的值的修改,如果const在※的右边,则锁住的是p的值,而p是一个内存地址,意味着你不能修改p的值,但是你可以修改p的值.

size_t的解释和妙用

sizi_t代表的是size0f()符号类型的返回,代表无符号类型,比如-1>sizeof(int)这里因为出现了比较运算符,会进行算数转换,有符号数转化为无符号数,所以-1会变成了unsigned int 会变成一个很大的数字.

常见的编译器错误

在这里插入图片描述

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值