首页 > 其他分享 >嵌入式-C语言基础:指针是存放变量的地址,那为什么要区分类型?

嵌入式-C语言基础:指针是存放变量的地址,那为什么要区分类型?

时间:2022-10-23 22:22:53浏览次数:54  
标签:变量 指向 16 打印 嵌入式 地址 C语言 指针

指针是存放变量的地址,那为什么要区分类型?不能所有类型的变量都用一个类型吗?下面用一个例子来说明这个问题。

#include<stdio.h>

int main()
{
    int a=0x1234;
    int *p=&a;
    char *c=&a;
    printf("p指向的变量a的地址=%p\n",p);//打印指针p指向的变量的16进制的地址
    printf("c指向的变量a的地址=%p\n",c);//打印指针c指向的变量的16进制的地址
    printf("p指向的变量a=%x\n",*p);//打印指针p指向的变量值,用16进制表示
    printf("c指向的变量a=%x\n",*c);//打印指针c指向的变量值,用16进制表示
    return 0;
}

输出结果:

p指向的变量a的地址=000000000061FE0C
c指向的变量a的地址=000000000061FE0C
p指向的变量a=1234
c指向的变量a=34
可以看大,两个不同类型的指针变量p和c指向同一个变量a的地址后,打印地址时输出的都是一样的地址,但是在打印变量值的时候出现了问题,通过指针

p打印变量a的值,输出的是16进制数1234,但是通过指针c打印变量a的值确是34;这是因为c是一个字符型指针变量,它指向的值只能是一个字符型变量,占1个字节,占8位,所以只能访问到a的低8位,也就是34,而p是一个整型指针变量,它指向的是一个整型变量,整型变量占4个字节,也就是32位,所以它可以访问到a的32位,自然低16位也能访问。

 

标签:变量,指向,16,打印,嵌入式,地址,C语言,指针
From: https://www.cnblogs.com/zxtang/p/16819804.html

相关文章

  • 单链表c语言实现网上查找
    插入#include<malloc.h>#defineSIZE100#defineINCREMENT_SIZE10typedefstructLNode{intdata;LNode*next;}LNode,*LinkList;//creataLinkLi......
  • C语言——自定义类型(结构体+枚举+联合)
    结构体基础知识结构是一些值的集合,这些值被称为成员变量;结构体可以存储不同类型的数据项,而数组中是存储相同类型数据项声明structtag{//struct是关键字,tag是结构体标签名......
  • C语言问题定位总结
    二分搜索法gitbisect命令,可以定位问题引入的第一个commit,如下图:用法举例:1、下载模拟代码:[email protected]:bradleyboy/bisectercise.git$cdbisecterci......
  • 嵌入式-C语言基础:指针
    指针就是地址,变量的值可以通过两种方式访问,一个是通过变量名,一个是通过地址访问。从而引出一个问题,即什么是指针变量?整型(字符)变量就是存放整形(字符)的变量,指针变量就是存放......
  • C语言_2
    video3~指的是按位取反。此时“位”值的还是二进制位;++k和k++的区别,前置++是先++再使用,后置++是先使用在++;强制类型转换:在想要转换类型的前面加上括号然后给与相应的类型名......
  • C语言笔记基础知识
    ......
  • C语言的练习题
    有1,2,3,4四个数字,那能组成多少个互不相同且无重复数字的三位数?都是多少?分析:三位数可表示为:个位:g,十位:s,百位:b.可以有多少组合:用for语句的嵌套#include<stdio.h>intmain(......
  • 《痞子衡嵌入式半月刊》 第 65 期
    痞子衡嵌入式半月刊:第65期这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。本期刊是开源项目(GitHub:Ja......
  • C语言学习--指针--指针和内存单元
    指针和内存单元指针:地址内存单元: 计算机中内存最小的存储单元。    指针的定义和使用inta=10;int*p=&a;*表示指针变量*p=250;指针的解引用,间......
  • 实验2 C语言控制语句应用编程
    1#include<stdio.h>2#include<stdlib.h>3#include<time.h>45intmain()6{7srand(time(0));89intdate=rand()......