|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 micolar 于 2019-8-8 13:52 编辑
- #include<stdio.h>
- int main(){
- char a[3][3] = {
- {48,49,50},
- {51,52,53},
- {54,55,56}
- };
- printf("%c",*(char*)a);
- return 0;
- }
复制代码
上面我定义了一个二维数组
因为数组名a 本身应该可以看成一个指针
一开始下意识输出格式是直接*a
然后我意识到指针也有类型
所以又改成了*(char*)a
但是又有个两个问题
1.int 假如是4个字节 char 1个字节 如果把一个指向int类型的指针强制换位char类型的指针
它读取是32位的前八位还是后八位
2.各个数组的行列可能是不同的
如果又有一个数组 char b[4][5]
那么(*b)++怎么理解
换句话说对于指针,它除了保存地址,还保存什么信息,它又以什么方式保存
c语言的指针地址是实际的机器地址 还是虚地址
问题1:
这个问题和运行环境有关
例如有一个32位数据 0x12345678
如果这样的代码运行在小端机器上,读取到的是 0x78
如果这样的代码运行在大端机器上,读取到的是 0x12 (这是一个理论上的答案,毕竟我没有大端的机器,没有测试过,不过我认为这个理论上的答案是正确的,你就认为是正确的就好了,^_^)
|
|