C语言提高_01
2017-12-07 22:37
155 查看
1.c语言中数组的地址是数组取地址(&)
例如:int a[]; 打印a和&a结果是相同的。但是打印a+1和&a+1结果就不同了,&a+1是跳过整个数组大小到下一个地址。
2.c应用开启的时候,系统会开辟四块内存区域:堆区 ,栈区,全局区(静态区,常量区),方法区
下面举例子说明:
字符串常量是在全局区中的,也就是当函数出栈的时候,字符串常量没有被析构掉,可以正常使用。
经电话语:指针指向谁就吧谁的地址赋值给指针。指针变量和他指向的内存空间变量是两个不同的概念。
上述中的两个函数中的局部变量指针指向的 都是一个字符串地址,如果这个两个字符串相同,c++编译器会做代码优化处理只会保留一份。所有说打印的地址是通过的。
栈的生长方向和buf的生长方向是两个不同的概念。
*p放在等号的左边 写内存
*p放在等号的右边 读内存。
常量区的内存不能通过指针去修改,不然会报错。例如:char * p=“alsdkfj”; *(p+2)=M;就会报错。 p为字符串的首地址,+2的话就到了第三个地址的位置。
野指针是指针指向了一块被回收的内存空间。一般free后,需要对指针进行赋NULL操作。
指针作为函数参数的精髓,c语言的特有现象,c语言的精华
间接赋值成立的三个条件:
1. 定义1一个变量(实参) 定义一个变量(形参)
2. 建立关联:把实参取地址传给形参
3.形参去间接的修改实参的值。
使用场景:
1 2 3条件写在一个函数中
12写在一块,3单独写在另一个函数中
1 23写在一块,,,,在C++中会使用到。
例如:int a[]; 打印a和&a结果是相同的。但是打印a+1和&a+1结果就不同了,&a+1是跳过整个数组大小到下一个地址。
2.c应用开启的时候,系统会开辟四块内存区域:堆区 ,栈区,全局区(静态区,常量区),方法区
下面举例子说明:
字符串常量是在全局区中的,也就是当函数出栈的时候,字符串常量没有被析构掉,可以正常使用。
经电话语:指针指向谁就吧谁的地址赋值给指针。指针变量和他指向的内存空间变量是两个不同的概念。
上述中的两个函数中的局部变量指针指向的 都是一个字符串地址,如果这个两个字符串相同,c++编译器会做代码优化处理只会保留一份。所有说打印的地址是通过的。
栈的生长方向和buf的生长方向是两个不同的概念。
3. 指针的强化
指针也是一种数据类型,有内存大小,可以赋值。*p放在等号的左边 写内存
*p放在等号的右边 读内存。
常量区的内存不能通过指针去修改,不然会报错。例如:char * p=“alsdkfj”; *(p+2)=M;就会报错。 p为字符串的首地址,+2的话就到了第三个地址的位置。
野指针是指针指向了一块被回收的内存空间。一般free后,需要对指针进行赋NULL操作。
4.通过指针间接赋值的意义
再函数调用的时候,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p,来改变实参,把运算结果传出去。指针作为函数参数的精髓,c语言的特有现象,c语言的精华
void getdata(int* n,char** m) { int q=0; char* w=NULL; w=(char*)malloc(100); strcpy(w,"assdfggghgh"); *m=w; *n=strlen(w); } int main(void) { int a=0; char* b=NULL; getdata(&a,&b); }这里a和b就是入参出参,在两个函数中都可以操作同一块内存,实现逻辑的分层处理。
间接赋值成立的三个条件:
1. 定义1一个变量(实参) 定义一个变量(形参)
2. 建立关联:把实参取地址传给形参
3.形参去间接的修改实参的值。
使用场景:
1 2 3条件写在一个函数中
12写在一块,3单独写在另一个函数中
1 23写在一块,,,,在C++中会使用到。
相关文章推荐
- 【C语言提高01】冒泡排序和数组做参数的问题
- [01]C语言的发展史
- 20161222C语言项目01_Reader文件阅读器分析
- C语言及程序设计提高例程-7 返回指针的函数
- C语言及程序设计提高例程-24 数组名作为函数参数
- C语言学习历程——字符串训练01
- C语言提高-36讲: 二维数组及其指针内容的实践
- [写给女生的C语言][01]Hello World!
- 【C语言提高19】【字符串模型】两头堵模型
- C语言学习-01第一个C语言程序
- 【C语言提高30】二级指针强化训练[02]
- 【C语言提高33】数组指针类型定义
- 【c语言陷阱——01】——二维数组模拟
- 【C语言】01-C语言概述
- 【C语言】01-C语言概述
- 【C语言提高40】结构体套一级指针和二级指针
- 【C语言提高42】结构体的高级话题:偏移量
- iOS_01_C语言简介
- NOIP2000提高组 4.方格取数 C语言题解
- c语言编译01--预处理--头文件的结构和用途