C语言的二维指针及其动态内存分配和释放
来源:互联网 发布:拖动拼图验证码js插件 编辑:程序博客网 时间:2024/05/21 06:48
要求:
初步掌握visual studio 2015 中控制台c程序的建立。
初步掌握visual studio 2015 中控制台c程序的建立。
结合课本讲解指针概念;指针上机练习。讲解动态分配和释放。一维指针动态分配和释放练习。二维指针概念讲解,二维指针动态分配和释放练习。
作业:矩阵乘法
用户输入矩阵1行数、列数,然后提示用户输入各元素;
用户输入矩阵2行数、列数,然后提示用户输入各元素;
输入后计算相乘结果矩阵。
用户输入矩阵1行数、列数,然后提示用户输入各元素;
用户输入矩阵2行数、列数,然后提示用户输入各元素;
输入后计算相乘结果矩阵。
要求:
1 自己安装Visual studio 2015. 从微软官网上下载visual studio 2015 (Community edition),然后申请序列号(免费),安装。
2.建立控制台应用程序。(上网查怎么建立)
3.使用二维指针及动态分配,完成作业,掌握指针和结构、文件的结合使用。
二维指针:int **p p是指向(一组指向整数数据指针)的指针,是一个二维指针。在其定义过程中,编译器并不对其进行内存的分配,因此必须自己管理其内存的分配与释放。内存分配如下:
p = (int **)malloc((sizeof(int*))*m); for (i=0;i<m;i++){ p[i] = (int *)malloc(sizeof(int)*n); }
动态内存释放过程与分配相反:
for (i=0;i<m;i++){ free(p[i]); }free(p);
下面的表达是成立的:
p[i][j] = *(*(p + i) + j)
*p 表示指针p存放的内容值,在定义指针时, *只是为了声明。
#include <stdio.h>#include <malloc.h>int main(){int n1, n2, m1, m2;float **p1,**p2,**p3;//定义三个二维指针float val,valu;printf("please input the size of first matrix:");scanf_s("%dx%d", &m1, &n1);//输入第一个矩阵的行数和列数p1 = (float **)malloc(m1* sizeof(float *));//动态内存分配for (int i = 0; i < m1; i++){p1[i] = (float *)malloc(n1 * sizeof(float));}printf("please input the size of second matrix:");scanf_s("%dx%d", &m2, &n2);p2 = (float **)malloc(m2 * sizeof(float *));for (int i = 0; i < m2; i++){p2[i] = (float *)malloc(n2 * sizeof(float));}p3 = (float **)malloc(m1 * sizeof(float *));for (int i = 0; i < m1; i++){p3[i] = (float *)malloc(n2 * sizeof(float));}printf("please input the first matrix:\n");for (int i = 0; i < m1; i++){for (int j = 0; j < n1; j++){scanf_s("%f", &val);*(*(p1 + i) + j) = val;}}printf("please input the second matrix:\n");for (int i = 0; i < m2; i++){for (int j = 0; j < n2; j++){scanf_s("%f", &val);*(*(p2 + i) + j) = val;}}//矩阵乘法运算for (int i = 0; i < m1; i++){for (int j = 0; j < n2; j++){valu = 0;for (int k = 0;k < m1; k++){valu += p1[i][k] * p2[k][j];}*(*(p3 + i) + j) = valu;}}//矩阵输出printf("output matrix1 is:\n");for (int i = 0; i < m1; i++){for (int j = 0; j < n1; j++){printf("%f ", *(*(p1 + i) + j));}printf("\n");}printf("output matrix2 is:\n");for (int i = 0; i < m2; i++){for (int j = 0; j < n2; j++){printf("%f ", *(*(p2 + i) + j));}printf("\n");}//输出计算结果printf("output matrix is:\n");for (int i = 0; i < m1; i++){for (int j = 0; j < n2; j++){printf("%f ", *(*(p3 + i) + j));}printf("\n");}//释放动态内存空间for (int i = 0; i < m1; i++){free(*(p1+i));}free(p1);for (int i = 0; i < m2; i++){free(p2[i]);}free(p2);for (int i = 0; i < m1; i++){free(p3[i]);}free(p3);getchar();//暂停,输入回车结束getchar();return 0;}
阅读全文
0 0
- C语言的二维指针及其动态内存分配和释放
- C/C++动态二维数组的内存分配和释放 .
- C/C++动态二维数组的内存分配和释放
- 二维数组的动态内存分配和释放
- C++动态二维数组内存的分配和释放 opencv
- C语言指针应用——内存分配和释放
- C语言动态内存分配与释放
- C语言实现一、二维数组动态内存分配与释放以及图像的线性插值放大与优化
- 动态二维数组的分配和释放
- 动态二维数组的分配和释放
- C和C++动态内存分配和释放的区别
- C和C++动态内存分配和释放的区别
- C和C++动态内存分配和释放的区别
- C和C++动态内存分配和释放的区别
- C和C++动态内存分配和释放的区别
- C和C++动态内存分配和释放的区别
- C语言二维数组动态内存分配
- C/C++中的二维数组动态内存分配与释放
- APICloud框架——总结一下最近开发APP遇到的一些问题 (三)
- Spring AOP
- 身份证识别SDK-身份证识别api(移动端-服务器端)
- 每周LeetCode算法题(一):Longest Substring Without Repeating Characters
- 类似QQ中“好友”、“群”、“多人聊天”之间在一个Activity里面切换界面
- C语言的二维指针及其动态内存分配和释放
- Http协议
- php基础面试题
- mybatis 解析Integer为0的属性,解析成空字符串
- Protocol Buffer技术详解(语言规范)
- 搭建reactive-demo
- mysql数据库权限管理
- AVL tree 记忆
- 即使被拖库,也可以保证密码不泄露