问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++中byte指针如何赋值...

发布网友 发布时间:2022-04-24 09:53

我来回答

3个回答

热心网友 时间:2023-10-09 13:24

我看了楼上的几位的答案,都没说到点子上面去。以下是我的看法:

首先数组和指针的概念你没分清楚,数组的本质你没搞清楚。这是导致问题出现的根源。

int x[5]; 这个定义里面,我们说定义了一个数组x,此数组有5个数组元素,元素的类型为int类型。首先要问的是,x到底为什么东西? 我知道,在谭浩强的书上面说x是数组名,x代表了数组第一个元素的首地址。没错,x确实是数组的名字,x的值也确实是第一个数组元素的地址值。注意这里我们说x代表的值与数组第一个元素的地址值相等,但是并不是说他们的类型是一样的。那么x的类型到底是什么呢? 有人说就是int * 类型。有如下语句可以做证:

int *p=x; //这句话是正确的。

x的类型真是int *吗,我们说不是,因为下面的语句是不正确的:

int a=10;
x=&a; // int *类型的变量时可以接受值的。所以x不是int*

那么我们可以猜测x的类型是不是 int *const呢。也就是说x是一个地址值不可以改变的指针。这句话貌似有点正确。但是请大家看看下面的例子:

int x[5]=;
int a=sizeof(x); // a的值到底是多少?实际上这里a的值是5*4=20
我这里使用的编译器是VC++ 6.0 int类型数据占用4个字节空间,所以这里的道的是整个数组占用的字节数。 我们不是说x的类型是iint * const类型的吗,也就是x应该是一个指针类型,应该是4个字节的啊,为什么sizeof出来时整个数组占用的字节数呢。例如

sizeof(int *)这个的结果就是4。所以有此可以看出,x的类型并不是int*,也不是int * const。

int x[5];中的x到底是什么呢,我们说x是数组,此数组有5个元素,并且每个元素都是int类型。 我们有一个识别数据类型的规律例如:

int x; //x类型为int
int *x;//x类型为int *
int **x;//x类型为int **
int (*x)[10];//x类型为int(*)[10]实际上是指向数组的指针
int (*x)(int ,int);//x的类型为int(*)(int,int)实际上是指向函数的指针

由此可以看出,一个符号是什么数据类型,我们只要在其定义的表达式中去掉符号本身,剩下的就是符号的类型了。照此推断,int x[5];中x的类型应该是 int [5]这个类型,可以看出此类型并不是int *类型。

那么int x[5];中的x可以这样赋值: int *p=x; 为什么呢,只能说这里面将x的类型隐式转换为了int *类型。所以这里是可以赋值的,因为进行了类型转换。 再请看下面的例子:

void function(int x[5])
{
cout<<sizeof(x)<<endl; //这里输出4
}

为什么会输出4,而不是4*5呢,可以看出上面的函数形参实际上类型是int*,并不是数组类型,所以我们在定义函数的时候,下面的都是与上面等价的:

void function(int x[])//元素个数是多少可以省略
{
cout<<sizeof(x)<<endl; //这里输出4
}

void function(int *x) //直接写成指针变量也没错
{
cout<<sizeof(x)<<endl; //这里输出4
}

他们都是等价的。

回到你提的问题:
int x[5];
int **p=&x; //为什么会报错? 因为类型不匹配。

p的类型是int **,而&x的类型却不是int **。 &x的类型实际上是int(*)[5],因为去的是x的地址,也就是说这个地址是数组的地址,并不是指向数组第一个元素的指针的指针(也就是二维指针),而是整个数组的地址。所以我们可以改成下面的:
int (*p)[5]=&x;//这就对了。

指向数组的指针,和指向数组元素的指针有什么不同?

我们说对于一个指针变量,要几点是我们必须注意的,例如int *p;我们要注意的是,p的类型是int*,p占用的空间4个字节,p指向的数据类型是int。p指向的数据类型占用4个字节。所以对于指针变量,我们要明白指针变量本身是占用空间的,本身是有类型的,其次指针变量所指向的空间是有类型的,是有空间的。

那么int *p; char *p1; 对于指针变量来说p,p1里面都放的是地址值,说白了就是一个数值,他们都占用4个字节的空间,但是他们的类型不一样,p里面的地址指向的是int类型的数据,p1指向的是char类型的数据,这主要体现在p++与p1++中他们在内存中移动的字节数是不一样的,我们假设int占4个字节,char占1个字节。那么对于p来说向前移动了4个字节,p1来说移动了一个字节。这就是他们的类型不同,导致运算过程中的不同。

int x[5];
int (*p3)[5]; 此时p3指向数组x,那么p3++实际上向前移动了多少呢,可以算出移动了4*5个字节。也就是p3指向的是一个数组,是整个数组,所以p3移动的时候是将一个数组当做一个整体来看待的。所以向前移动了一整个数组的距离。

说到这里相信你应该明白了许多了。其实里面有很多东西,一时也讲不清楚,我打字也打的够累了,其余的你自己去体会吧。

热心网友 时间:2023-10-09 13:25

因为没有给m_explain申请内存,如果是指针,必须先申请内存。或者使用数组,让系统自动分配内存。
可改为:
static jbyte *m_explain = malloc(2*sizeof(jbyte));
int i=0;
m_explain[i++]=(jbyte)0xFF;//这两行始终执行不下去
m_explain[i++]=(jbyte)0x11;

//释放内存
free(m_explain);

或者
static jbyte m_explain[2];
int i=0;
m_explain[i++]=(jbyte)0xFF;//这两行始终执行不下去
m_explain[i++]=(jbyte)0x11;追问谢了哈老大!问题已解决....非常感谢!有时间请你吃饭哈....

热心网友 时间:2023-10-09 13:25

static jbyte *m_explain;这儿编译不报错么?
感觉应该报错才对的,静态变量没有初始化
m_explain没有指向任何地址呢
试试用static jbyte *m_explain = new jbyte[128];这样,先分配内存试试?追问谢了哈老大!加了个m_explain = (jbyte*)malloc(10*1024);能往下执行了。但是我还想问下,如果我把这个初始化放在另一个方法里Explain_init(),并且这个方法在另一个cpp文件里,我在方法里直接调用Explain_init(),是不是也可以达到同样的效果?

追答应该可以,但是能不能直接调用到另外cpp文件里的Explain_init()函数不好说呢
另外C++里不推荐使用malloc和free,一般使用new 和delete

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
这句话用了什么修辞方法? 属蛇水瓶座女生的性格特点 樱花雨特效礼物怎么解锁 我听了一首歌,里面高潮有句歌词“不要问我敢不敢”。但不知道歌名 ...抖音》我敢闯祸我敢放纵我思考歌曲分享是什么 阳光幼儿园是公立还是私立 江苏天空城市服务有限公司电话是多少? 常州市武进湖塘集体资产经营有限公司怎么样? 华为mate20x使用体验如何 刺激战场排位上分小技巧 提升段位需注意这些细节 建设银行信用卡附属卡怎么查余额 Byte类型怎么增量赋值?? 怎么查副卡号码是多少? C++ byte赋值的问题 移动怎么查询副卡号码 JAVA中 byte 为什么能赋常量的值,却不能赋变量的值。 JAVA的byte赋值问题 给byte字节赋值 JAVA 中 byte赋值的问题.新手求教 JAVA byte 赋值 java 中关于byte数组的赋初值问题 java byte 赋值问题 java中对byte赋值开辟多大空间? 美的65L的电热水器,电源线坏了,怎么折开? QQ诞生了多少年 QQ音乐是何时诞生的? 手机QQ是哪一年诞生的 手机qq是哪一年诞生的? 食品包装袋设计能申请外观设计专利吗 包装袋设计要求有哪些。 电信主卡可以查副卡的号码吗? C# byte 赋值 中国移动如何用自己的主卡查询副卡卡号。 为byte类型赋值?? 电信怎么查副卡号码? 如何向byte[]中循环赋值? 中国移动如何用自己的主卡查询副卡卡号? BYTE赋值问题求解... 联通怎么查副卡卡号 byte[]类型赋值给byte[]类型的实体字段时值会改变了,为什么? 怎样查询加油卡副卡卡号 byte b=(byte)5.998 强行赋值后b的值是多少 网上可以查询信用卡附属卡卡号吗? 如何把一个byte的值赋为空,而不是零 服务器浪潮怎么备份刚装好的系统啊 浪潮财务软件数据备份后怎样恢复 浪潮财务数据怎样备份和恢复 浪潮ERP账套备份恢复工具恢复以前的备份的帐套数据为什么出现属性值无效的问题 浪潮财务软件问题 浪潮mess如何备份成xml