作业:

#include <stdio.h>
#include<string.h>
int main(){
char s[100];
gets(s);
int len;
len = strlen(s);
for(int i=0;i<len-1;i++){
printf("%c\n",s[i]);
}
puts(s);
}

//

hello
h
e
l
l
hello

 

指针:

值传递

#include <stdio.h>
#include<string.h> void change(int j){
j=5;//形参
}
int main(){
int i =10; //i是局部变量
printf("befor change i=%d\n",i);
change(i);//函数调用时,i是实参
printf("after change i=%d\n",i);
return 0;
}

指针:

#include <stdio.h>
#include<string.h> void change(int *j){
*j=5;//形参
}
int main(){
int i =10; //i是局部变量
printf("befor change i=%d\n",i);
// change(i);//函数调用时,i是实参
// printf("after change i=%d\n",i);
change(&i); //函数调用时,&i是实参
printf("afterer i=%d",i);
return 0;
}

如果是需要到改变函数值的时候,可以使用指针来对值进行修改,取到地址值,再将地址值对应的形参赋值给实参达到改变的目的;

指针的偏移:

场景: 数组不能和整型变量,浮点型,字符型变量类比
数组名 a 类型是数组,a里面存了一个值,是地址值,是数组的起始地址。
 

#include <stdio.h>
#include<string.h>

int main(){
int a[5]={1,2,3,4,5};
int *p;//对一个指针变量进行取值,得到的类型是其基类型
p=a;
printf("*p=%d",*p);

}

内存权限(3):可读,可写,可读写

常见错误:
对应内存位置不可读

int main(){
int a[5]={1,2,3,4,5};
int *p;//对一个指针变量进行取值,得到的类型是其基类型
p=a;
printf("*p=%d\n",*p);
for(int i=0;i<5;i++){
printf("%d\n",*(p+i));
//p+i的优先级 比*低
}
return 0; }

*p=1
1
2
3
4
5

 

指针自增 自减

#include <stdio.h>
#include<string.h>
//指针自增自减
int main(){
int a[3]={2,7,8};
int *p;
int j;//j的地址 指针
p=a;//让指针变量p,指向数组的开头
j=*p++;//先把*p的值赋值给j,然后对p+1 //j=*p;如果不是(*p)++ 那么就是先p++
// j=(*p)++;//给这里加了括号是指的是这个地址对应的数值+1 也就是a[0]=2,变成a[0]=3;
printf("a[0]=%d,j=%d,*p=%d\n",a[0],j,*p); //2,2,7
j=p[0]++;//j=p[0];p[0]++;
printf("a[0]=%d,j=%d,*p=%d\n",a[0],j,*p);//2,2,7 的基础上再执行 结果:2,7,8
system("pause");
return 0;
}
//一维数组 数组传递是弱化为指针的 char d[] =*d 

void change(char *d){
*d ='H';
*d = 'E';
}
int main(){
char c[10]="hello";
change(c);
puts(c);
return 0;
}
void change(char *d){
*d ='H';
d[1] = 'E';
d[2]='L';
//传递与偏移
}
int main(){
char c[10]="hello";
change(c);
puts(c);
return 0;
}

//指针与动态内存申请 列表 二叉树 图——动态对应的堆空间;
//整型、浮点型、字符型变量、数组放在栈空间

栈的效率高 直接定义了空间

动态申请(很重要

malloc -- free --  NULL
int main(){
int i;
char *p;//起始地址
scanf("%d",&i);
p=(char*)malloc(i);//申请空间的接口 单位是字节 很重要
strcpy(p,"malloc success");
puts(p);
free(p);//释放空间时,p得值必须和最初得申请一致
printf("free success\n");
p=NULL; //如果不把p值设置为NULL p就被称为野指针
system("pause");
}

栈空间与堆空间区别
子函数里写一个栈空间的东西;
主函数里如果函数执行时结束子函数的内容时,就会将子函数执行结束栈空间释放掉;

puts();打印不出子函数里的栈里的内容了;

如果是堆函数(声明时,最好要强转,类型一致比较好)
在子函数里打印puts正常,在主函数里打印puts都正常

子函数中申请的堆空间,如果不free就会一直在,即使子函数结束,也不会影响堆空间;

指针

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
int i;
scanf("%d",&i);
char *p;
p = (char*)malloc(i);
char c;
scanf("%c",&c);
gets(p);
puts(p);
return 0;
}

双指针 就是一个指针是地址 另一个指针的写的是那个指针的位置

【ccc】为了ds的ccc2的更多相关文章

  1. 创建Azure DS 虚拟机并附加SSD硬盘

    $subscriptionName = "Windows Azure Enterprise Trial" #订阅名称 $location = "China East&qu ...

  2. DS实验题 融合软泥怪-2 Heap实现

    题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert) ...

  3. Hyper-V 2012 R2 故障转移群集之建立域控(AD DS)与加入域

    Windows  2012 R2建立域控(AD DS)与加入域 Active Directory概述:          使用 Active Directory(R) 域服务 (AD DS) 服务器角 ...

  4. dataGridViewX和数据库的链接之dataGridViewX1.DataSource = ds.Tables[0];

    dataGridViewX1.DataSource = ds.Tables[0]; 1, dataGridViewX和数据库链接,如果我们用 dataGridViewX1.DataSource = d ...

  5. C段旁注工具CCC.exe

    C段旁注工具CCC.exe可以进行C段的web站点批量查询 自动排除DNS错误的域名以及IP和当前服务器不符的域名 抓取bing上的所有URL,不光是域名信息,方便直接进入 自动生成html报告,方便 ...

  6. Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM

    <Windows Azure Platform 系列文章目录> Update: 2016-11-3,如果大家在使用Linux VM,使用FIO进行IOPS测试的时候,请使用以下命令: su ...

  7. code vs1262 不要把球传我(组合数学) 2012年CCC加拿大高中生信息学奥赛

    1262 不要把球传我 2012年CCC加拿大高中生信息学奥赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解  查看运行结果     题目描述 De ...

  8. DS Tree 已知后序、中序 => 建树 => 求先序

    注意点: 和上一篇的DS Tree 已知先序.中序 => 建树 => 求后序差不多,注意的地方是在aftorder中找根节点的时候,是从右往左找,因此递归的时候注意参数,最好是拿纸和笔模拟 ...

  9. [DS Basics] Data structures

    1, LinkedList composed of one and one Node: [data][next]. [head] -> [data][next] -> [data][nex ...

  10. DS实验题 Old_Driver UnionFindSet结构 指针实现邻接表存储

    题目见前文:DS实验题 Old_Driver UnionFindSet结构 这里使用邻接表存储敌人之间的关系,邻接表用指针实现: // // main.cpp // Old_Driver3 // // ...

随机推荐

  1. 【Java并发009】原理层面:ThreadLocal类全解析

    一.前言 在Java多线程模块中,ThreadLocal是比较重要的知识点,虽然ThreadLocal类位于java.lang包,但是这个类基本上仅用于多线程. 二.ThreadLocal类概要 2. ...

  2. 图文详解在VMware Workstation 16 PRO虚拟机上安装Rocky 8.6 linux系统

    一.安装VMware Workstation虚拟机 下载VMware Workstation 16 PRO虚拟机 https://www.vmware.com/cn/products/workstat ...

  3. qtcreator 报错error: You need to set an executable in the custom run configuration.

    解决 没有配置运行的可执行文件. 在 Executable 中填入正确的可执行文件位置,这里我使用了一个变量,可以根据 release,debug的区别自动找到对应的可执行文件.

  4. 解决fpdf不能写入中文问题

    安装依赖 pip3 install FPDF -i https://mirrors.aliyun.com/pypi/simple fpdf 原生是php调用的,不过他也提供了python的调用方式 示 ...

  5. kubernetes数据持久化StorageClass动态供给(二)

    存储类的好处之一便是支持PV的动态供给,它甚至可以直接被视作为PV的创建模版,用户用到持久性存储时,需要通过创建PVC来绑定匹配的PV,此类操作需求较大,或者当管理员手动创建的PV无法满足PVC的所有 ...

  6. 【大数据】kafka-02:Kafka Connect内容、原理及使用

    〇.概述 1.常见资料 (1)confluent https://docs.confluent.io/5.4.0/connect/kafka-connect-jdbc/sink-connector/s ...

  7. 1分钟理清楚C++类模板和模板类区别

    1.定义区别 类模板和模板类主要关注点是后一个单词. 类模板:主要描述的是模板,这个模板是类的模板.可以理解为一个通用的类,这个类中的数据成员,成员函数的形参类型以及成员函数的返回值类型不用具体的指定 ...

  8. 前端HTML不使用flash兼容IE浏览器播放视频

    前言:最近公司项目上有个需求就是在IE8上不使用flash技术来去实现视频播放 分析:IE8不支持HTML5,所以不能使用video标签,在非IE的浏览器可以使用video标签 目录 我的解决 DEM ...

  9. 连接MySql时提示%d format: a number is required, not str

    代码: sql = "select * from appelementinfo" coon = pymysql.connect(user='root', password='', ...

  10. python之路43 JavaScript语法BOM与DOM jQuery对比 标签绑定事件

    前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...