将int的地址分配给char指针

时间:2013-06-16 12:49:54

标签: c

在以下程序中,假设a存储在地址1000处,并且int占用4字节的存储空间。现在,c将指向基地址,即1000并将其递增3将使其指向地址1003.现在,打印c指向的字符必须给我对应于ascii 65的字符。但它什么都不打印! / p>

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

int main(){
    int a = 65;
    char *c = &a;
    printf("%c\n", *(c+3));
}

我的推理有什么问题?

2 个答案:

答案 0 :(得分:7)

您没有考虑到字节序。在小端系统上,'a'(或编码不兼容ASCII,无论65是什么)将在第一个字节中,其他字节为0.传递0字节到printf("%c\n",_);只打印换行符。

答案 1 :(得分:3)

  

打印c指向的字符必须给我对应ascii 65

的字符

它应该,如果你的机器是小端的,它确实会。但是,您使用int打印*(c + 3)的第4个字节,仍为0.或许您的意思是*c


然而,最好的不是通过指针来混叠。整数具有很好的属性,可以通过按位运算符对它们进行操作。

uint32_t i = 0x12345678;
uint8_t b0 = (i >>  0) & 0xff;
uint8_t b1 = (i >>  8) & 0xff;
uint8_t b2 = (i >> 16) & 0xff;
uint8_t b3 = (i >> 24) & 0xff;

这样,无论酸结构的字节顺序如何,都可以正确访问字节