数码之家

 找回密码
 立即注册
搜索
查看: 2498|回复: 5

关于指针,大家讨论下

[复制链接]
发表于 2020-10-30 15:54:52 | 显示全部楼层 |阅读模式
本帖最后由 lyy-cy 于 2020-10-30 16:10 编辑

看视频学嵌入式,看到这里有不同见解,大家讨论下。:lol:


https://www.bilibili.com/video/BV1j4411t7yN?p=5

这个视频  31分钟处





首先感谢B站up主的无私分享;


int a = 5; //假如此时 a 的地址是  0x12345678

(int *) a  等 价于   (int *)0x00000005  并不是    (int *)0x12345678

一个是a的地址,一个是a的变量值;

个人认为这里讲错了。 请大家讨论共同提高。



  1. #include<stdio.h>

  2. int main() {

  3. int a = 0x12345678;
  4. printf("a的值      \t0x%x\n",a);
  5. printf("a的地址    \t0x%x\n",&a);
  6. printf("(int *)a 的值 \t0x%x\n",(int *)a);
  7. printf("(int *)&a 的值 \t0x%x\n",(int *)&a);

  8. return(0);

  9. }
复制代码








后面还有关于指针长度的,个人也有不同意见,第35分钟

  1. #include<stdio.h>

  2. int main() {

  3. int a = 0x12345678;
  4. printf("a的值      \t0x%x\n",a);
  5. printf("a的地址    \t0x%x\n",&a);
  6. printf("(int *)a 的值 \t0x%x\n",(int *)a);
  7. printf("(int *)&a 的值 \t0x%x\n",(int *)&a);


  8. int *p = &a;
  9. printf("a的长度      \t%d\n",sizeof(a));
  10. printf("p的长度      \t%d\n",sizeof(p));
  11. return(0);

  12. }
复制代码

无聊的朋友们可以一起来讨论下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2020-10-30 16:07:50 | 显示全部楼层
视频里讲的并没有错,视频里是说申请一个整数变量a,地址为0x12345678,   如果换成指针就是(int *)a, 而你却地址做变量赋给a,问题就在这里,(int *)a这是告诉编译器,后台的a是一个数据类型为整形的指针。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-30 16:12:36 | 显示全部楼层
本帖最后由 lyy-cy 于 2020-10-30 16:17 编辑
深寒刺骨 发表于 2020-10-30 16:07
视频里讲的并没有错,视频里是说申请一个整数变量a,地址为0x12345678,   如果换成指针就是(int *)a, 而你却 ...

int * a   和  int * (&a)  不同   

0x12345678 可以是任意数字,只是为了证明,变量的值和变量的地址不同。
int  *a  不能等价与      int* a的地址

回复 支持 反对

使用道具 举报

发表于 2020-10-30 16:41:02 | 显示全部楼层
楼主对的
&a才等于0x12345678
回复 支持 反对

使用道具 举报

发表于 2020-11-2 18:13:18 | 显示全部楼层
个人理解,int a=0x12345678;(int *)a仍然是表示a的值,只不过是强制使用int类型的指针。还是这个例子,如果是(unsigned char *)a,结果应该就是0x12或0x78(此值与数据存储大小端有关)
回复 支持 反对

使用道具 举报

发表于 2020-11-3 13:57:38 | 显示全部楼层
没啥错。
因为这个东西和编译环境,目标环境,编译器有很大关系。另外C语言标准也有点影响 C90,C99,C11.
你做实验那个Dev-C++我总觉得是个半死不活的项目,用的编译器很有可能也没更新,换成VS-code吧,也是免费的,编译器可以用最新的gcc。

程序里面(int*)a 单独这么看我理解是在做强制类型转换,把int型的变量a强制转换成int* 类型的。(int *)&a同样,只是做类型转换。

指针长度,我没看视频,这个也和编译器有关,寻址方式和范围的影响,一般32位,64位,也不一定啊。

int *a  
int* a
int * a
int*a
这四个有区别吗?嘿嘿嘿
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-5 23:54 , Processed in 0.156000 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表