C/C++ 学习日记第一棒(数据类型)

本文深入探讨了C语言中的数据类型、内存管理、指针应用等核心概念。解析了数组与指针的区别,void指针的作用以及如何通过指针间接修改变量。同时讨论了变量的本质及其与内存的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1- 数据类型的本质:固定大小内存块的别名。

2- 压死初学者的三座大山抓狂抓狂:a 和 &a 数组数据类型(定义一个1 数组类型; 2数组指针; 3数组类型和数组指针类型的关系)。

代码:

void main(){
    int a;    //告诉 C 编译器分配4个字节的内存
    int b[10];//告诉 C 编译器分配40个字节的内存
    printf(" b: %d,  b+1: %d,  &b: %d,  &b+1:%d \n",b, b+1, &b, &b+1);
}
>b: 1244972,  b+1:1244976,  &b:1244972, &b+1:1245012
解析:b+1 和 &b+1 结果不一样,是由于 b 和 &b 所代表的数据类型不一样。

          b 代表的是数组首元素的地址;&b 代表的是整个数组的地址。所以 b+1 内存增加4个字节,而 &b+1 内存增加40个字节。

3- void 指针的意义

(1)C 语言规定只有相同类型的指针才可以相互赋值;

(2)void* 指针作为 值用于“接收”任意类型的指针;

(3)void* 指针作为 值赋值给其他指针时需要强制类型转换:

int *p1 = NULL;
char *p2 = (char*)malloc(sizeof(char)*20) ;
4- 不存在 void 类型的变量:C 语言没有定义 void 究竟是多大内存的别名。

5- 变量的本质

(1)程序通过变量来申请和命名内存空间 int a=0;

(2)通过变量名访问内存空间。变量的本质:(一段连续)内存空间的别名(是一个门牌号)。

(3)修改变量有几种方法?

  a- 直接。

  b- 间接。内存有地址编号,拿到地址编号也可以修改内存!牛!

代码:

void main(){
    int a;
    int b;
    char *p;
    a=10;//直接赋值
    printf("&a: %d\n", &a);

    //间接赋值==》直接通过内存,首先输出 a 的地址,得知 a 的地址为1245024
    *((int*)1245024) =200;
    printf("a: %d\n", a);
   
    //间接赋值==》通过指针 
    p = 1245024;
    *p = 300;
    printf("a: %d\n", a);
 }
>&a: 1245024

  a:200

  a:300

6- 数据类型和变量的关系?

> 通过数据类型定义变量。

7- 总结及思考

(1)通过变量往内存读写数据;

(2)不是向变量(而是向变量所代表的内存空间中)读写数据。问:变量跑哪去了?

思考1:变量三要素(名称、大小、作用域),变量的生命周期?

思考2:C++ 编译器是如何管理函数1,函数 2 变量之间的关系的?

====》引出两个重要话题:

内存四区模型

函数调用模型


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值