转载https://www.cnblogs.com/lulipro/p/7460206.html
笔记:
查找内存最大地址方法
printf("ch 的地址:%p\n", &ch);输出地址
printf("ch :%p\n", ch); 输出16进制 97-->61 'a'-->61
那么怎么输出'a'
malloc申请的堆内存
typedef 类型定义
printf("age = %d\n",age);
printf("%s",msg);
地址为0的内存,是为操作系统预留的。存的是0或((void *)0)
int arr[3] = {1,2,3};
int*p = arr;
for(;p!=arr+3;p++){
printf("%d\n",*p);
} --指针指向下一个同类型的内存块
C语言中,实参传给形参,是值传递,而不是地址传递
const int *p1;
int const *p2;
int * const p3;
最后一种是指针是只读的,p3本身的值不能被修改;前面两种情况是指针指向的数据是只读的,不能通过指针改变对应的数据。
C语言中的程序数据会按照他们定义的位置,数据的种类,修饰的关键字等因素
栈区、堆区、静态数据区、方法区。
通过指针传递数据给函数不是为了在函数中改变它指向的对象,是为了防止这个目标数据被改变。传递指针只是为了避免拷贝大型数据。
每个函数本身也是一种程序数据,一个函数包含了多条执行语句,它被编译后,实质上是多条机器指令的集合。
在程序载入到内存后,函数的机器指令存放在一个特定的逻辑区域:代码区。既然是存放在内存中,那么函数也是有自己的指针的。
C语言中,函数名作为右值时,就是这个函数的指针。