作业:

#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. K8Snode节点管理集群资源方法

    1.1 方法1 1.将master的admin.conf 文件拷贝到 node节点 [root@k8s-m ~]#scp /etc/kubernetes/admin.conf root@192.168 ...

  2. golang 概念理解

    https://www.youtube.com/watch?v=cN_DpYBzKso https://blog.golang.org/gos-declaration-syntax 1.golang ...

  3. 【深入浅出 Yarn 架构与实现】3-2 Yarn Client 编写

    上篇文章介绍了编写 Yarn Application 的整体框架流程,本篇文章将详细介绍其中 Client 部分的编写方式. 一.Yarn Client 编写方法 本篇代码已上传 Github: Gi ...

  4. 【Java并发008】原理层面:ReentrantLock中 await()、signal()/signalAll()全解析

    一.前言 上篇的文章中我们介绍了AQS源码中lock方法和unlock方法,这两个方法主要是用来解决并发中互斥的问题,这篇文章我们主要介绍AQS中用来解决线程同步问题的await方法.signal方法 ...

  5. ATM分析

    # 查看余额功能 1.第一层直接调用查看余额的接口(传当前登录用户名) 2.第二层直接调用第三层数据查询的接口 3.第二层从用户字典中提取出用户余额返回给第一层展示 # 账户提现功能 1.第一层获取用 ...

  6. html网页图片加载失败的友好处理方式

    网络环境总是多样且复杂的,一张网页图片可能会因为网路状况差而加载失败或加载超长时间,也可能因为权限不足或者资源不存在而加载失败,这些都会导致用户体验变差,所以我们需要对图片加载失败时的情况进行一个弥补 ...

  7. 【Java SE进阶】Day05 异常,线程

    一.异常 1.概念 程序执行过程中,出现非正常情况导致JVM的非正常停止 本身是一个类,产生异常即创建并抛出一个异常对象 Java处理异常的方式是进行中断处理 异常非语法错误,语法错误直接不会产生cl ...

  8. 【SQL知识】SQL中的join操作总结:内连接、外连接(左右全)

    一.含义 基于表之间的共同字段,把来自两个或多个表的行结合起来 二.分类 内连接:join / inner join 外连接:left join / right join / full outer j ...

  9. vulnhub靶场渗透实战12-driftingblues2

    ​vbox导入,网络桥接. 靶机下载地址:https://download.vulnhub.com/driftingblues/driftingblues2.ova 一:信息收集 1:主机发现. 2: ...

  10. linux-微服务-jar包部署指令

    1 orderservice docker build -t orderservice . docker run -d -p 8084:8084 --name orderservice orderse ...