为什么会出现无限死循环,如何修改该程序输出ASCII码

为什么会出现无限死循环,怎么修改该程序输出ASCII码?
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char i;
   for( i=1;i<=127;i++)
   {
    printf("%d\n",&i);
   }
    return 0;
}

------解决方案--------------------
#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned char i; // 如果char i,则i的值是[-128, 127],所以i <= 127 永远为真,则会出现死循环

    for(i=1;i<=127; i++)
    {
        printf("%d\n", i);
    }

    return 0;
}

------解决方案--------------------
LS正解!学习一下。
------解决方案--------------------
如1楼所言,char的范围是-128~127,对其进行运算不会超过这个范围,所以循环执行条件始终为真,所以死循环,改成无符号char范围是0~255就可以了;
printf中那个i不用取地址&,直接i就可以,取地址的话,显示的是变量i的地址值