C指针算术问题

0 c math pointers

我有一个小指针算术和一般指针,我把这个代码拉到一起.

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

int main(int argc,char **argv){
    void *ptr=NULL;
    char a='a';
    int i0=0;
    char b='b';
    int i1=1;
    char c='c';
    int i2=2;
    ptr=&a;
    //What do I do here to get to i0?
    printf("%d",(int*)ptr); //and to print it out?
    while(1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题正是我在评论中提出的问题.如何在不执行'ptr =&i0;'的情况下让ptr指向i0 使用指针算术?另外,我如何正确地为字符和整数打印出来(一个用于char的方法,一个用于int的方法).

提前致谢.;)

phi*_*hag 6

唯一的方式来获得一个指向的位置i0& i0.

虽然某些编译器可能会对齐i0以便* ((int*) (((char*) ptr) - 1))可以用于访问i0,但这并不能保证.编译器经常重新排序局部变量,甚至可能根本不将它们存储在内存中.