| 这个作业属于哪个班级 | 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列地址

2.PTA实验作业

2.1说反话

2.1.1伪代码

2.1.2代码截图

2.1.3没有同学

2.2 字符串的冒泡排序

2.2.1伪代码

2.2.2代码截图

2.2.3没有同学

Posted on 2020-12-27 20:58  RocEye  阅读(101)  评论(0编辑  收藏  举报
Live2D