您的位置:首页 > 编程语言 > C语言/C++

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

2016-01-21 22:21 399 查看
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 变量之间的关系的?

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

内存四区模型

函数调用模型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CC++ 内存