指针小结(1)

变量的地址&交换位置

#include<stdio.h>//指针小结 (1)
int main()
{void swap(int *m,int *n);int i=0;printf("i的地址为%p\n",&i);//打印i地址int a,b;printf("请输入a,b:"); scanf("%d%d",&a,&b);swap(&a,&b);printf("交换后的两个数为:%d %d\n",a,b);
}
void swap(int *m,int *n)//交换两个数,这种写法用于返回多个值时。
{*m+=*n;*n=*m-*n;*m-=*n;
}

运行结果如下

运用:最大与最小

#include<stdio.h>
int main()
{void minmax(int a[], int length, int *min, int *max);int a[5];for(int i=0 ; i<5 ; i++){scanf("%d", &a[i]);}int min, max;minmax(a, sizeof(a)/sizeof(a[0]), &min, &max);printf("%d %d\n", min, max);return 0;
}
void minmax(int a[], int length, int *min, int *max)//选取最大最小值
{*min = a[0];*max = a[0];for(int i=0 ; i<length ; i++){if(*min > a[i])*min = a[i];if(*max < a[i])*max = a[i];}
}

指针与数组

#include<stdio.h>
int main(){char a[]={0,1,2,3,4,5,6,7,8,9};//字符数组a char *p=&a[0];//指针p指向a[0]位置 char *p1=&a[5];// 指针p1指向a[5]位置 printf("p=%p\n",p);//打印p位置,为0060FF100 printf("p+1=%p\n",p+1);//打印p+1位置,为0060FF11 printf("p1-p=%d\n",p1-p);//打印p1与p的差值,为5 int b[]={0,1,2,3,4,5,6,7,8,9};//数组b int *q=&b[0];//指针q指向b[0]位置 int *q1=&b[5];//指针q1指向b[5]位置 printf("q=%p\n",q);//打印q位置,为0060FED0 printf("q+1=%p\n",q+1);//打印q+1位置,为0060FED4 printf("q1-q=%d\n",q1-q);// 打印q1与q的差值,为5/*7、8行相比较,p+1向后移动一位,恰为char型长度 15、16行相比较,q+1向后移动四位,恰为int型长度 9、17行表示 q+5 == q1,p+5 ==p1 即:&array[n] == &array[0]+n*/ return 0;
}

初探malloc函数

#include<stdio.h>
#include<stdlib.h>int main(){//C99之前无法用变量做数组定义的大小 int n;printf("请输入数量n:\n");scanf("%d",&n);int *a=(int*)malloc(n*sizeof(int));//这里定义*a相当于定义数组a[n]//malloc调用需要stdlib头,可以在linux系统下用man malloc查找用法 //malloc返回void*类型,故要强制类型转换printf("请输入n个数:\n");for(int i=0;i<n;i++){scanf("%d",&a[i]);}//简单逆序输出一下printf("逆序输出为:\n");for(int i=n-1;i>=0;i--){printf("%d ",a[i]);}printf("\n");free(a);//用了malloc就要在结尾free掉,养成良好习惯从我做起//因为如果没有free,程序运行时间过长就会产生内存漏洞(垃圾)//如果没有malloc分配内存,free会发生错误//因此最好在定义指针时赋值0//当然我这里在定义时直接分配了就不用这么写return 0;
}

你的系统能给你多大的空间?

#include<stdio.h>
#include<stdlib.h>
int main(void){void *p;int cnt=0;while(p=malloc(100*1024*1024)){cnt++;}printf("分配了%d00MB的空间。\n",cnt);free(p);return 0;
}

(我的运行结果是1900MB,相比翁恺老师视频里的3300MB,实在弱鸡得可以)

不能free的情况(doge)

  1. 此p非彼p
#include<stdio.h>
#include<stdlib.h>
int main(void){void *p;p=malloc(100*1024*1024);p++;//这里p移动到了下一位置,非原来申请空间的pfree(p);return 0;
}
  1. 不取亦free
#include<stdio.h>
#include<stdlib.h>
int main(void){void *p;int i;p=&i;//p没有动态申请空间,系统会记得借过你什么,也记得没借过你什么free(p);return 0;
}
  1. 梅开二度
    就是free过一次再想free
    系统会报错

萌新的C语言指针小结(1)相关推荐

  1. C语言指针小结(一)---- *p++与*++p;(*p)++ 与 ++(*p)的解释

    C语言指针小结(一) *p++与*++p:(*p)++ 与 ++(*p)的理解 1.*p++ 等同于 *p; p += 1; #include <stdio.h> int main(voi ...

  2. c++ float转double_萌新求教//c语言float和double哪个算得快?

    喜欢的可以收藏转发加关注 首先, c语言本身没有float在计算时要统统专为double的规定. 那么, 就要考虑一下实际情况了,一般来说, x86的CPU中有两个单元可以被用来计算浮点数, 一个是远 ...

  3. java炸弹游戏_java制作数字炸弹游戏-萌新疑点,Java语言交流,技术交流区,鱼C论坛 - Powered by Discuz!...

    2021-1-4 12:17:00 import java.util.Scanner; public class Demo { public static void main(String[] arg ...

  4. (萌新笔记)C语言的复习笔记

    初始时间:大一(上) 10月 更新时间:大一(上) 10月 想了想还是写一下简介吧,我在暑假自学了一点C语言,现在是个大一入门C语言(的弱鸡,所以本文可能会有很多基本知识,还请大家斟酌观看 PS:本文 ...

  5. 萌新的九宫棋(C语言)

    萌新的九宫棋 文章目录 萌新的九宫棋 一.概述 1.实现功能 2.介绍 3.编译器 4.致谢 二.设计思路 三.程序实现 (一).函数设计 (二).部分具体实现 1.main()函数的实现 2.pcM ...

  6. 业界萌新对斯坦纳树的小结

    业界萌新对斯坦纳树的小结 0.简介 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种.最小生成树是在给定的点集和边中寻求最短网络使所有点连通.而最小斯坦纳树允许在给定点外增加额外的点,使 ...

  7. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下: http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这 ...

  8. C语言指针知识点小结

    前期回顾   C语言指针基础知识点(一)–指针及指针变量   C语言指针基础知识点(二)–指针变量的引用   C语言指针基础知识点(三)–指针变量作为函数参数   C语言指针基础知识点(四)–通过指针 ...

  9. 转行?小白?来看看这门和Java分庭抗礼的萌新语言!会的同学笑出了声!

    黑马程序员视频库 播妞微信号:mm7718mm 传智播客旗下互联网资讯.学习资源免费分享平台 编程语言的选择一直是各类开发商们(也就是咱们的老板)最爱讨论的话题之一,在程序员行业,相同水平的技术,会因 ...

最新文章

  1. SQL Server 2008 下载地址(微软官方网站)
  2. Java 中 StringBuilder 在高性能用法总结
  3. 打地鼠c语言代码_女白领在家玩打地鼠游戏,无意间学会python编程,还有教程有源码...
  4. Java BigDecimal初探
  5. R语言之连接mysql数据库
  6. solr 配置mysql数据源_solr data-config.xml配置文件的见解mysql数据源
  7. Jetson-TX2安装opencv教程
  8. Tableau中的行级数据安全性——第1部分
  9. Spark入门阶段一之扫盲笔记
  10. PowerShell监控——监控共享打印机 获取打印记录、打印人员、打印文件等详细信息
  11. Linux udhcpc/udhcpd 移植
  12. linux怎么生成arm文件,Linux下ffmpeg转换工具配置(MP3和AMR格式文件互转).docx
  13. SAP:SMARTFORM打开WORD文档出错,或无法编辑
  14. 计算机word题目设置标题,word文档标题怎么设置?word设置标题样式的方法
  15. 洛谷4578 LOJ2520:[FJOI2018]所罗门王的宝藏——题解
  16. 计算机加法器原理,加法器原理
  17. Linux如何修改主机名hostname
  18. 荣耀畅玩7c能用鸿蒙吗,荣耀畅玩7C评测:人脸识别双摄 超高性价比
  19. Spark RDD 极简教程
  20. 一本通1015:计算并联电阻的阻值

热门文章

  1. Thread.currentThread()、isAlive()、Thread.sleep()的使用
  2. srv.exe蠕虫病毒~
  3. Linux:chmod -R 777 * 是什么意思?
  4. 扫雷游戏(基础版本)
  5. 西门子S7-1200PLC3轴伺服控制程序 触摸屏是西门子Tp900
  6. mysql emoy表情_“笑哭”emoji表情过时了,一波“捂脸”大军正在路上
  7. 非常值得收藏的书签栏,程序员学习与设计相关的网站(有附件下载)
  8. 《排列字母》把字符串中的字母按其在字母表中的顺序排列。
  9. keras教程【2】编写CNN
  10. [读论文]CVPR2019: Occupancy Networks: Learning 3D Reconstruction in Function Space