这个作业属于哪个班级 | C语言--网络2011/2012 |
---|---|
这个作业的地址 | C博客作业05--指针 |
这个作业的目标 | 学习数组相关内容 |
姓名 | 杨振鹏 |
1.本章学习总结
1.1 指针定义、指针相关运算、指针做函数参数
- 地址和指针
直接访问 :通过变量名访问
int x = 20,y = 1,z = 155;
printf(“%d”, x);
间接访问 :通过地址访问
int *p;
printf(“%d”, *p); - 变量名的定义
指针变量的定义 :类型名 *指针变量名- 指针变量所指向的变量的类型
int *p; 整形指针 .
float *p; 浮点型指针 .
char *p; 字符型指针 .
- 指针变量所指向的变量的类型
1.2 字符指针
定义字符指针:char *p;
内容为字符串,同字符数组;
来输出字符指针的内容:使用printf("%s",p);
p->str 首地址
1.3 指针做函数返回值
- 只有函数本身的类型为指针类型,函数返回值才能为指针。
- 返回的指针最好不要指向函数内部定义的变量,因为函数内部定义的变量为局部变量,在函数运行结束后,这些变量会自动销毁。
1.4 动态内存分配
- 栈区(stack)
- 堆区(heap)
一般由程序员分配释放, 若程序员不释放,程序结束时可能由操作系统回收.类似于链表,在内存中的分布不是连续的,它们是不同区域的内存块通过指针链接起来的.一旦某一节点从链中断开,我们要人为的把所断开的节点从内存中释放.
由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,内存的分配是连续的,类似于平时我们所说的栈。
#include<stdio.h>
#include<string.h>
int main()
{
char* s1;
char* s2;
s1 = (char*)malloc(500000 * sizeof(char));//申请500000个char单位的空间;
s2 = (char*)malloc(6000000 * sizeof(char));//申请6000000个char单位的空间;
free(s1);
free(s2);
return 0;
}
1.5 指针数组及其应用
- 二维数组:一旦定义,那么每个字符数组的字符串最大长度和首地址都不能改变
- 字符指针数组:比二维字符数组更加灵活,其指向的每个字符串的首地址可以改变,字符串最大长度也可以改变。
1.6 二级指针
int p
其中,p和p都表示地址,p指向p,而*p指向内容。p则表示内容。
1.7 行指针、列指针
- 行指针:指的是一整行,不指向具体元素。
- 列指针:指的是一行中某个具体元素。
int a[3][4] - a即是它的行指针,a+0表示第0行的地址,a+1表示第1行地址
- 或者可以说成&a[0]表示第0行的地址,&a[1]表示第1行的地址
- 那么a[0]+0,a[0]+1就表示第1行第1列的地址,第1行第2列地址
- a[1]+0,a[1]+1就表示第2行第1列地址,第2行第2列地址