指针是怎么知道所指向的变量占几个字节的?

注意不是指针变量比如说inti=1;int*p=i;int*是如何实现p能精准的指向i,并且不会超出变量本来的范围顺便能帮我解释一下malloc()函数的强制类型转换到底... 注意不是指针变量
比如说
int i = 1;
int * p = i;
int*是如何实现p能精准的指向i,并且不会超出变量本来的范围
顺便能帮我解释一下malloc()函数的强制类型转换到底是怎么回事
int *p = (int*)malloc(4);

这里int * 到底是为了使malloc()返回的变量与前面一致
还是为了知道malloc函数分配的内存中的单个变量所占内存
展开
 我来答
cdyzxy
2020-08-10 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3730万
展开全部

int *p;已经告诉编译器,这个指针是指向int类型数据的指针。

malloc取得的指针是不指定类型的,需要强制转换成赋值号左边指针类型才可以不报错地赋值。即malloc返回值是个地址,当作int *来用,无论malloc是否申请了足够一个int占用的字节数。

匿名用户
2020-08-10
展开全部
int*p=i;这句是错的

应该写为int *p=&i;提取i的地址放在p里,在取p指向的值时按int的大小来取,你如果访问p+1这个地址也不会报错,但是得到个什么值就不好说了。
void* malloc(a);这个函数给定一个参数a用于表示获取多少字节的地址空间,返回一个空类型的指针,这个地址有a个字节的可用空间,因为指针类型是空类型也就是void*,没法赋值给其他类型的指针变量,所以进行强转。在c里,只要有可用地址。就可以进行任意类型访问,例如有20个字节的可用地址空间,就可以用int类型的指针来存储5个变量,用char类型的指针可以存储20个变量,存了20个char类型的变量之后也可以强转一下指针来读成5个int类型变量。
指针的类型表示的就是所指向的变量占空间的大小
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式