c语言-C语言中的指针转换问题

问题描述

C语言中的指针转换问题

代码如下

 # include<stdio.h>

int main()
{
    unsigned int a = 0xfffffff7 ;
    unsigned char i = (unsigned char)a ;
    char *b = (char *)&a ;//让b指向a的地址

    printf ("%x, %x
", i, *b) ;//不懂:*b应该是char类型的,为什么结果会是4个字节?
    printf ("%08x, %08x
", i, *b) ;

    return 0 ;
}
/*
result:
f7, fffffff7
000000f7, fffffff7
*/

printf ("%x, %x
", i, *b) ;//*b应该是char类型的,为什么结果是fffffff7,是4个字节?

解决方案

说错了。。。。。你在输出的时候,虽然B是一个指针,但是他是指向一个INT型的数据,你用%X输出,编译器会去这个地址去这个数据,一看,是个Int,就全打出来。*B是fffffff7的首地址,

解决方案二:

我说的对吗? ^_^

解决方案三:

你是强制它输出4个字节,FF是填充上去的,你设定了08

解决方案四:

若是32位机,则指针占4字节,若是64位机,则指针占8字节......
答案就在这里:c语言指针问题

解决方案五:

 printf ("%x, %x
", (char)0xf7, *b) ;

这样你就明白了。(result: fffffff7, fffffff7 )

时间: 2024-08-03 18:09:01

c语言-C语言中的指针转换问题的相关文章

C语言 socket 如何发送带指针的结构体?

问题描述 C语言 socket 如何发送带指针的结构体? 发送一个带指针的结构体,我知道怎么发送? 先把结构体转换成字符串,然后发出.但是接收的时候,怎么接收到结构体中?thanks! 解决方案 发送: struct f;char *ffff[sizeof(f)];memcpy(ffff &f sizeof(f)); 接收: struct f; ffff为收到的数据 memcpy(&f ffff sizeof(ffff)); 解决方案二: C语言---结构体指针C语言--结构体中的指针C语

c语言-C语言结构体的指针问题。

问题描述 C语言结构体的指针问题. struct GenInfo { uint64_t (*next)(struct GenInfo * const); enum GeneratorType type; union { struct GenInfo_Constant constant; struct GenInfo_Counter counter; struct GenInfo_Discrete discrete; struct GenInfo_Exponential exponential;

Go语言中的指针运算实例分析_Golang

本文实例分析了Go语言中的指针运算方法.分享给大家供大家参考.具体分析如下: Go语言的语法上是不支持指针运算的,所有指针都在可控的一个范围内使用,没有C语言的*void然后随意转换指针类型这样的东西.最近在思考Go如何操作共享内存,共享内存就需要把指针转成不同类型或者对指针进行运算再获取数据. 这里对Go语言内置的unsafe模块做了一个实验,发现通过unsafe模块,Go语言一样可以做指针运算,只是比C的方式繁琐一些,但是理解上是一样的. 下面是实验代码: 复制代码 代码如下: packag

C语言中常量指针与指针常量区别浅析

这篇文章主要介绍了C语言中常量指针与指针常量区别,有需要的朋友可以参考一下 常量指针是指--指向常量的指针,顾名思义,就是指针指向的是常量,即,它不能指向变量,它指向的内容不能被改变,不能通过指针来修改它指向的内容,但是指针自身不是常量,它自身的值可以改变,从而指向另一个常量. 指针常量是指--指针本身是常量.它指向的地址是不可改变的,但地址里的内容可以通过指针改变.它指向的地址将伴其一生,直到生命周期结束.有一点需要注意的是,指针常量在定义时必须同时赋初值. 注:也有人将这两个名称的定义与含义

c语言-C语言中的指针和数组的初始化

问题描述 C语言中的指针和数组的初始化 char a[]=""abcdef"";char *p =""cdefg"";a[1]='A';p[1]='A'; 这段代码有什么问题?#include int main(){ char amessage[]=""now is the time""; char *pmessage = ""now is the time"

c 指针 分配-C语言中通过指针能不能知道它在内存中的分配方案

问题描述 C语言中通过指针能不能知道它在内存中的分配方案 例如char* pstr; 有几种方式: pstr = "123"; char s[] = "123"; pstr = s; pstr = (char*)malloc(4); pstr[0] = '1'; pstr[1] = '2'; pstr[2] = '3'; pstr[3] = ''; 那么,如何通过pstr判断它是哪种方式的? 解决方案 这两种的结果都是一样的不必纠结,只有数组和指针在分配的时候是不同

c语言-C语言中二级指针修改数组问题。

问题描述 C语言中二级指针修改数组问题. 数组相当于一级指针,我写了一个二级指针被调用.结果它总是宕机,求指导,谢谢. 解决方案 这段程序编译会报错吧:cannot convert parameter 1 from 'char (*)[100]' to 'char **' 可以这样 试试看#include #include #include int getMemBuf(char*& p2){ char* tmp = NULL; tmp = (char*)malloc(100); strcpy(t

指针-新手OJ,C语言 去除字符串中的所有空格模块, 不知为何出错,求大神指点

问题描述 新手OJ,C语言 去除字符串中的所有空格模块, 不知为何出错,求大神指点 作用: 把数组a中的所有空格去除, 并把后面的往前移动.例如: a b c变成:abc 字符指针 *p *q 数组a[] for(p=&a[0]; p!=''; p++)if(*p==' ')for(q=p; *(q+1)!=''; q++)*q=(q+1); //去除a字符串中的空格 但总是不对, 求大神指点. 解决方案 #include<stdio.h>int main(){ char str[20

c语言结构体中指针数组怎样赋值

问题描述 c语言结构体中指针数组怎样赋值 定义一个结构体struct AS{ char *p[1]:}:怎样用gets函数给指针数组赋值呢? 解决方案 看Unix/Linux上的man: Standard C Library Functions gets(3C)NAME gets fgets - get a string from a stream SYNOPSIS #include char *gets(char *s); char *fgets(char *s int n FILE *str