作业:

#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. Vue+Go前端后端一体化 企业级微服务网关项目

    Vue+Go前端后端一体化 企业级微服务网关项目(~11) 课程目录: 第1章 拒绝培训机构烂大街项目,冲刺Offer首选[Vue+Go,稀缺组合,赶快上车!]1-1 摒弃千篇一律项目,选我:前后端一 ...

  2. 13、设计一个函数process,在你调用他的时候,每次实现不同的功能,输入a,b两个数, 第一次调用时找出a,b中的最大者。 第二次找出最小者,,第三次求两个数的和。

    /* 设计一个函数process,在你调用他的时候,每次实现不同的功能,输入a,b两个数, 第一次调用时找出a,b中的最大者. 第二次找出最小者,,第三次求两个数的和. */ #include < ...

  3. <七>理解多态

    理解多态 多种多样的形态(静态多态,动态多态) 静态多态(编译时期) 1:函数重载 bool comparet(int ,int); bool compare(double,double); comp ...

  4. Spring04:JdbcTemplate及事务控制(AOP、XML、注解)

    今日内容 Spring中的JdbcTemplate 作业:Spring基于AOP的事务控制 Spring中的事务控制 基于XML的 基于注解的 一.JdbcTemplate 1.JdbcTemplat ...

  5. django.core.exceptions.ImproperlyConfigured: Field name `tester_id` is not valid for model `WebCase`.

    代码: class WebCase(models.Model): id = models.AutoField(primary_key=True) casename = models.CharField ...

  6. 数据结构 传统链表实现与Linux内核链表

    头文件: #pragma once #include<stdlib.h> //链表结点 struct LinkNode{ void *data; struct LinkNode *next ...

  7. SSM基础学习笔记

    SSM框架: 1.界面层---servlet类---SpringMVC 2.业务逻辑层---service类---Spring 3.数据访问层(持久层)---dao类---MyBatis 一.MyBa ...

  8. Centos下部署最后一版支持Docker的k8s集群

    部署版本 首先要确定部署的版本 查询Kubernetes对Docker支持的情况 kubernetes/dependencies.yaml at master · kubernetes/kuberne ...

  9. Node.js躬行记(26)——接口拦截和页面回放实验

    最近在研究 Web自动化测试,之前做了些实践,但效果并不理想. 对于 QA 来说,公司的网页交互并不多,用手点点也能满足.对于前端来说,如果要做成自动化,就得维护一堆的脚本. 当然,这些脚本也可以 Q ...

  10. 第七节 VOR/DME进近程序保护区的绘制

    飞行程序设计软件实践 通过前面六节的练习,2023社区版插件的主要功能都已经使用到了.今天通过VOR/DME非精密进近程序,再将这些功能串起来使用一下.今天的软件,我们使用浩辰CAD2023版(过期后 ...