C 指向另一类型变量的指针赋值
我正在运行一个简单的程序 这是代码C 指向另一类型变量的指针赋值,c,pointers,C,Pointers,我正在运行一个简单的程序 这是代码 #include<stdio.h> #include<conio.h> int main(){ char c,*cc; int i; long l; float f; c='z'; i=15; l=77777; f=3.14; cc=&c; printf("c=%c cc=%u\n",*cc,cc); cc=&i; printf("i=%d cc=%u\n",*cc,cc); cc=&l; printf("
#include<stdio.h>
#include<conio.h>
int main(){
char c,*cc;
int i;
long l;
float f;
c='z';
i=15;
l=77777;
f=3.14;
cc=&c;
printf("c=%c cc=%u\n",*cc,cc);
cc=&i;
printf("i=%d cc=%u\n",*cc,cc);
cc=&l;
printf("l=%ld cc=%u\n",*cc,cc);
cc=&f;
printf("f=%f cc=%u\n",*cc,cc);
return (getch());
}
当我将整型变量赋值给char指针时,它必须只指向整型变量的第一个字节
那么,为什么第二行打印的是15呢?数字15适合一个字节,即int
的最低有效字节。如果你的机器是little endian(很可能也是很明显的),那么LSB就是内存地址最低的字节
并使用
%p
打印指针,%u
用于无符号整数。阅读printf()
的文档,整数15
的字节布局是[0x0f][0x00][0x00][0x00]
,因此当您取消引用cc
时,您将获得第一个字节的内容(恰好是15)
若要查看差异,请尝试大小写
i=1000
,您应该会看到-24
(地址&i
处的字节是0xe8
,当被解释为有符号字节时是-24
),因此,如果我将整数i中的较大值赋值,则会导致错误?我说的对吗?@google它不会导致错误,它会截断取模256的数字。(如果你的char
的宽度超过了8位,那么可以使用其他数字。)很抱歉,我在评论中出错了,它会打印其他数字。如果是float,会发生什么情况?@google float通常与
c=z cc=2686791
i=15 cc=2686780
l=-47 cc=2686776
f=0.000000 cc=4199093