刚刚入坑,size_t提示警告

看视频的代码 自己写过来就出警告 视频中没什么问题
#include<stdio.h>
#define max 3
int main()
{
    int array[] = { 1,2,3 };
    int i=0 ;
    for (size_t i = 0; i < max; i++)
    {
        printf("array[%d] = %d\n", i, array[i]);
    }
    return 0;
}
结果没问题,就是出现警告.

警告 C6246 “i”的局部声明遮蔽了外部作用域中具有相同名称的声明
警告 C6340 符号不匹配: 已将“unsigned int”作为 Param(2) 传递,但需要使用一些 signed 类型来调用“printf”。

我的解答思路和尝试过的方法

看官方解释没看懂
我自己找出来只要不用size_t 声明变量 就不会出现警告

我想要达到的结果

目前就是结果不重要,就像搞清楚为什么出这个警告,之前第一次写完是没有的,怕以后经常出现类似问题请各位帮忙看看.
有点强迫症..

第一个警告是说,for循环中的size_t i 跟第6行的 int i;变量名重复了,把第6行(或者for循环中的i,该第6行只改1处,改for循环的话需要改多处)该个名字即可。
第二个警告是说,printf("array[%d] = %d\n", i, array[i]);这句话中,第二个参数 i 是unsigned int类型,使用%d(arrar[%d]这里 )来输出是不对的,因为unsigned int 需要用%u来输出,unsigned int的正整数 超出 signed int的正整数范围,用%d输出 unsigned int可能会出错。但是,你这里最大值是3,没什么影响,如果要消除这个警告,就把 arrar[%d] 改成 arrar[%u] 即可

把for中的筽换成j