关于指针的一个C有关问题
关于指针的一个C问题
#include <stdio.h>
typedef unsigned char* BYTE_POINTER;
void ShowBytes(BYTE_POINTER start, int len)
{
int i;
for(i = 0; i < len; i++)
printf( "%.2x ", start[i]);
printf( "\n ");
}
void ShowInt(int x)
{
ShowBytes((BYTE_POINTER)&x, sizeof(int));
}
void ShowFlow(float x)
{
ShowBytes((BYTE_POINTER)&x, sizeof(float));
}
void ShowPointer(void* x)
{
ShowBytes((BYTE_POINTER)&x, sizeof(void*));
}
int main()
{
int x = 100;
float y = 100.0;
void* p = &x;
printf( "Sizeof int is %d\n ", sizeof(int));
ShowInt(x);
printf( "-------------------------------------------------\n ");
printf( "Sizeof float is %d\n ", sizeof(float));
ShowInt(y);
printf( "-------------------------------------------------\n ");
printf( "Sizeof pointer is %d\n ", sizeof(void*));
ShowInt(p);
printf( "-------------------------------------------------\n ");
}
我知道ShowByte()函数的具体运作机制?
谢谢!
------解决方案--------------------
void ShowBytes(BYTE_POINTER start, int len)
{
int i;
for(i = 0; i < len; i++)
printf( "%.2x ", start[i]);
printf( "\n ");
}
按照你们所说的话,int x = 100; ShowBytes(&x, sizeof(x));就会报错了,但是可以运行的呀,讲的我还是头大了,麻烦再解释下
----------------------------------
首先我觉得你有必要去看看书,彻底弄明白指针,数组之类
在题目中,int是4字节的。而你的指针是byte型,单字节指针,它指向int型的首地址,对它来说,int型就相当于四个数据的byte数组(这只是打个比方),所以可以安全地使用。
所以这里使用是在特定情况下地,不是在哪里都可以用。
------解决方案--------------------
ShowBytes(BYTE_POINTER)&x,sizeof(x))的作用是从低到高
打印变量x的每个字节的内容(x可以是单一变量,不一定是数组)
start实际上是unsigned char *类型,start等于x的首地址,
start[i]访问的是第i字节,x为int型时sizeof(x)为4,结果
依次打印x的4个字节
#include <stdio.h>
typedef unsigned char* BYTE_POINTER;
void ShowBytes(BYTE_POINTER start, int len)
{
int i;
for(i = 0; i < len; i++)
printf( "%.2x ", start[i]);
printf( "\n ");
}
void ShowInt(int x)
{
ShowBytes((BYTE_POINTER)&x, sizeof(int));
}
void ShowFlow(float x)
{
ShowBytes((BYTE_POINTER)&x, sizeof(float));
}
void ShowPointer(void* x)
{
ShowBytes((BYTE_POINTER)&x, sizeof(void*));
}
int main()
{
int x = 100;
float y = 100.0;
void* p = &x;
printf( "Sizeof int is %d\n ", sizeof(int));
ShowInt(x);
printf( "-------------------------------------------------\n ");
printf( "Sizeof float is %d\n ", sizeof(float));
ShowInt(y);
printf( "-------------------------------------------------\n ");
printf( "Sizeof pointer is %d\n ", sizeof(void*));
ShowInt(p);
printf( "-------------------------------------------------\n ");
}
我知道ShowByte()函数的具体运作机制?
谢谢!
------解决方案--------------------
void ShowBytes(BYTE_POINTER start, int len)
{
int i;
for(i = 0; i < len; i++)
printf( "%.2x ", start[i]);
printf( "\n ");
}
按照你们所说的话,int x = 100; ShowBytes(&x, sizeof(x));就会报错了,但是可以运行的呀,讲的我还是头大了,麻烦再解释下
----------------------------------
首先我觉得你有必要去看看书,彻底弄明白指针,数组之类
在题目中,int是4字节的。而你的指针是byte型,单字节指针,它指向int型的首地址,对它来说,int型就相当于四个数据的byte数组(这只是打个比方),所以可以安全地使用。
所以这里使用是在特定情况下地,不是在哪里都可以用。
------解决方案--------------------
ShowBytes(BYTE_POINTER)&x,sizeof(x))的作用是从低到高
打印变量x的每个字节的内容(x可以是单一变量,不一定是数组)
start实际上是unsigned char *类型,start等于x的首地址,
start[i]访问的是第i字节,x为int型时sizeof(x)为4,结果
依次打印x的4个字节