我有一个小指针算术和一般指针,我把这个代码拉到一起.
#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的方法).
提前致谢.;)
该唯一的方式来获得一个指向的位置i0是& i0.
虽然某些编译器可能会对齐i0以便* ((int*) (((char*) ptr) - 1))可以用于访问i0,但这并不能保证.编译器经常重新排序局部变量,甚至可能根本不将它们存储在内存中.