c - 给另一种类型变量的指针赋值

标签 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("l=%ld cc=%u\n",*cc,cc);
cc=&f;
printf("f=%f cc=%u\n",*cc,cc);

return (getch());
}

因此,据我所知,整数的大小仍然高于 char,因此当我将整数变量分配给 char 指针时,它必须仅指向整数变量的第一个字节,因为 cc 是一个 char 指针。因此,当我运行输出时,只有第一条 printf 行应该给出正确的输出,其他行必须打印一些地址或一些垃圾值。

但就我而言,第二行 printf 也给出了正确的值,即我分配给整数变量的 15,而我认为它必须给出垃圾值。请告诉我这是怎么发生的?

这是我的输出。

c=z cc=2686791
i=15 cc=2686780
l=-47 cc=2686776
f=0.000000 cc=4199093

最佳答案

when i am assigning the integer variable to char pointer it must point only first byte of the integer variable

那么为什么第二行打印 15 会令人惊讶呢?数字 15 适合一个字节,即 int 的最低有效字节。如果您的机器是小端字节序(很可能而且显然是这样),那么 LSB 正是具有最低内存地址的字节。

<小时/>

并使用%p打印指针,%u用于无符号整数。阅读 printf() 的文档。

关于c - 给另一种类型变量的指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18951915/

相关文章:

c - 无法访问类型转换的虚空指针

c++ - 如何使用 Struct 打印我的交换函数

c++ - const auto * 和 const auto 之间的区别?

c++ - C++语言的两道题

检查缓冲区中的子字符串

c - 如何使用指针访问结构中列表中的结构?

c - 是否有库或其他方法可以进行 128 位数学运算?

c++ - `const` ness、引用和函数调用

c - 从 winAVR 开始

C 低级 I/O : Why does it hang in the while loop?