1.类型决定了对内存的解释能力:对内存的解释是靠类型去解释的、也就是我们以什么样类型去看待它。在C语言中类型主宰了一切。
2.强转是告诉编译器我在这块对内存的解释将发生变化。
3.int a; 这里面的a被称为标识符。
4.int ar[10];注意对数组大小的定义有三个要求:(1)必须是整形。(2)必须是常量。(3)必须是正数。也就是说对数组大小定义的这个值必须在程序与预编译的时候就能确定下它的值。
5.数组 int ar[5]={};//所有的元素初始化为0;
6.部分元素初始化,其他的元素也会被初始化为0;
7.局部变量区的开辟是在堆区;
8.ar[1];其中的方括号被称为下标访问符。
9.sizeof计算muge类型的、变量的大小;
10.sizeof是在预编译的时候,计算目标的大小的。
11.我们把全局变量称为数据,局部变量称为代码;全局变量是在全局变量区开辟内存空间的,而局部变量是在栈区开辟空间的。
12.局部变量的值是在运行时才获得值的。而全局变量则是在编译完之后就已经被写入值了。
13.一般把全局变量称为数据。它被编译成了程序可执行文件的一部分。
14.局部变量编译的时候并没有给值。
15.const int a;//编译是不能通过的因为这种定义没有意义。
16.程序编译的时候会有一个符号描述表。符号描述表里会记录程序中所定义的各个参数的信息。对于普通变量,符号描述表里只记录它的标识符和类型,而不会记录它所赋的初值。对于常变量,符号描述表中不仅会记录它的标识符和类型还会记录它所赋的初值。
17.变量和常变量最大的区别就是在符号描述表中是否记录了它的值。
例如,下面的一段代码:
#include<stdio.h>
void main()
{
int ar[]=[0,1,2,3,4,5,6,7,8,9];
const int n=sizeof(ar)/sizeof(ar[0]);//sizeof()函数是在函数预编译的时候就计算值的。
int br[n];
}
18.不是一个函数就占用了整个栈空间,栈空间是编译器确定的,一般的默认的是1M。所有的函数共享栈空间,以栈帧形式进行分配,栈帧大小一般为80byte。
20.循环的嵌套会增加程序的时间复杂度。
21.程序为什么难编,是因为资源不够。
22.#include<stdio.h>
void main()
{
int ar[10]={1,2,3};
++ar;//是不允许的
ar=NULL;//是不允许的
}
为什么会这样呢?因为当数组名退化为指针的话,就变成了常量值。
23.数组ar[1]=100;//==》*(ar+1)=100;
ar[i]==>*(ar+i)
i[ar]==》*(i+ar)//实际上是一样的。
24.int *p=NULL;
这个里面的的*在这里是声明的意思。
25.下面的程序段:
int ar[10]={1,2,3,4};
int *p=ar;//int *p=&ar[0];是不同的概念;
*(ar+i) 等价于*(p+i)
ar[i]等价于p[i]
其中的ar是 int *型的。
26.数组的首地址和数组元素的首地址虽然相同,但它们却不是相同的概念。
27.所有的下标运算都会转换为指针的运算。
mov esi + ecx,//汇编中的寻址方案。
28.编译的时候数组名是一个常量,指针也是一个常量。