【ccc】为了ds的ccc2
作业:
#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的更多相关文章
- 创建Azure DS 虚拟机并附加SSD硬盘
$subscriptionName = "Windows Azure Enterprise Trial" #订阅名称 $location = "China East&qu ...
- DS实验题 融合软泥怪-2 Heap实现
题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert) ...
- Hyper-V 2012 R2 故障转移群集之建立域控(AD DS)与加入域
Windows 2012 R2建立域控(AD DS)与加入域 Active Directory概述: 使用 Active Directory(R) 域服务 (AD DS) 服务器角 ...
- dataGridViewX和数据库的链接之dataGridViewX1.DataSource = ds.Tables[0];
dataGridViewX1.DataSource = ds.Tables[0]; 1, dataGridViewX和数据库链接,如果我们用 dataGridViewX1.DataSource = d ...
- C段旁注工具CCC.exe
C段旁注工具CCC.exe可以进行C段的web站点批量查询 自动排除DNS错误的域名以及IP和当前服务器不符的域名 抓取bing上的所有URL,不光是域名信息,方便直接进入 自动生成html报告,方便 ...
- Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM
<Windows Azure Platform 系列文章目录> Update: 2016-11-3,如果大家在使用Linux VM,使用FIO进行IOPS测试的时候,请使用以下命令: su ...
- code vs1262 不要把球传我(组合数学) 2012年CCC加拿大高中生信息学奥赛
1262 不要把球传我 2012年CCC加拿大高中生信息学奥赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 De ...
- DS Tree 已知后序、中序 => 建树 => 求先序
注意点: 和上一篇的DS Tree 已知先序.中序 => 建树 => 求后序差不多,注意的地方是在aftorder中找根节点的时候,是从右往左找,因此递归的时候注意参数,最好是拿纸和笔模拟 ...
- [DS Basics] Data structures
1, LinkedList composed of one and one Node: [data][next]. [head] -> [data][next] -> [data][nex ...
- DS实验题 Old_Driver UnionFindSet结构 指针实现邻接表存储
题目见前文:DS实验题 Old_Driver UnionFindSet结构 这里使用邻接表存储敌人之间的关系,邻接表用指针实现: // // main.cpp // Old_Driver3 // // ...
随机推荐
- Web安全Day1 - SQL注入、漏洞类型
Web安全Day1 - SQL注入.漏洞类型 1. SQL注入 1.1 漏洞简介 1.2 漏洞原理 1.3 漏洞危害 2. SQL漏洞类型 2.1 区分数字和字符串 2.2 内联SQL注入 2.3 报 ...
- Android网络请求(终) 网络请求框架Retrofit
Android网络请求(终) 网络请求框架Retrofit Retrofit底层是由OkHttp封装的,Retrofit对于注解的使用十分频繁,所以不了解注解的同学们可以去查查资料什么的. 这里有一个 ...
- 重学c#系列——委托和匿名函数[二十五]
前言 简单介绍一下什么是委托. 正文 以前也写过委托,这次算是重新归档,和新的补充吧. https://www.cnblogs.com/aoximin/p/13940125.html 有些人说委托是函 ...
- SpringCloud Alibaba(三) - GateWay网关
1.基本环境搭建 1.1 依赖 <!-- Gatway 网关会和springMvc冲突,不能添加web依赖 --> <dependency> <groupId>or ...
- 「Goravel 上新」用户授权模块,让你简单的对非法用户 Say No!
首先,让我们定义一个规则:用户只能访问自己创建的文章. facades.Gate.Define("update-post", func(ctx context.Context, a ...
- 【每日一题】【二分mid&贪心】2022年2月8日-NC163 最长上升子序列(一)
1.描述给定一个长度为 n 的数组 arr,求它的最长严格上升子序列的长度.所谓子序列,指一个数组删掉一些数(也可以不删)之后,形成的新数组.例如 [1,5,3,7,3] 数组,其子序列有:[1,3, ...
- 2020-12-16HDOJ-ACMsteps笔记
1.1.5 Problem Description Your task is to calculate the sum of some integers. Input Input contains a ...
- input、print、字符串格式化输出
1.使用input(), print()进行用户交互 """ 以前银行取钱只能拿着存折去柜台跟小姐姐交流才可以 你想干嘛 我想取钱 请输入密码 滴滴滴密码 想取多少钱 我 ...
- Qt栅格布局、ScrollArea和用户选择界面
用户选择界面 就我们在实际开发的时候可能需要面对这样一个界面 做个demo试试看 其实我们可以分解一下这个界面 就是除了控制相关的内容,最主要的就是这个界面之上,有一个个动态的输入的控件,上面都是学生 ...
- nuxt.js安装使用
首先要学会看文档,https://www.nuxtjs.cn/guide/configuration 一.创建项目,并运行 终端运行 npx create-nuxt-app <项目名> ( ...