今天学点东西,拿指针开刀,我是不会告诉你是因为我上课的时候没听明白,我觉得上课就听明白的人一定是天赋哥!!!(网上的老师太腻害了推荐b站的c语言编程学习)
创新互联是专业的滨湖网站建设公司,滨湖接单;提供做网站、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行滨湖网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!首先明白指针变量是个啥,我不用太官方的话了,为了简单易懂就直接一点啦,变
重点来了:指针变量就是保存其他变量(可以是普通的变量也可以是指针变量)的地址
int* p;
一个指针变量就长这样不过这个指针变量没有初始化,是一个野指针(不是好东西)。
指针变量也是有类型的但它们的大小都一样
#includeint main(){
printf("%d\n",sizeof(int*));
printf("%d\n",sizeof(char*));
printf("%d\n",sizeof(short int*));
printf("%d\n",sizeof(float*));
printf("%d\n",sizeof(double*));
return 0;
}
在32位上是4个字节,在64位上是8个字节(因为是保存地址,地址的长度代表指针的保存的长度)
ok 接下来来讲一下 指针的符号和最最简单的运用
*这是一个解引用的符号
如果不理解那是不是因为你平时看到的定义指针变量的是这样的
int *p=NULL;
让你感到迷糊 换一个写法
int* p=NULL;
这就好理解多了
int*是定义指针的类型,而p是指针变量
&取地址符,这个不多讲,都懂的啦
了解基本的操作来写个最简单的
#includeint main(){
int a=200;
int* p=&a;
printf("%p\n",&a);
printf("%p\n",p);
return 0;
}
二者的输出一样的,记得要写成p=&a不可以写成p=a;p保存的是地址不是a的值
可以通过指针来改变指针保存的地址中的值
#includeint main(){
int a=200;
int* p=&a;
*p=1008611;
printf("%d",a);
return 0;
}
这里就用到了解引用,*p就是的对a地址中的类容进行操作了。
接下来就是指针类型的区别了,你一定要明白基本数据类型所占的空间大小,看我演示给你看看
#includeint main(){
int a=200;
char* p=&a;
*p=1008611;
printf("%d",a);
return 0;
}
就变成这样了为啥呢,应为数据类型为int 占了4个字节而char类型的指针就操作和char空间长度一样的范围,也就是一个字符的长度。而如果是int*的话就可以操作4个字符的空间完成修改。
#includeint main(){
int a=200,b=200;
char* p=&a;
int* k=&b;
*p=1008611;
*k=1008611;
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
至于为啥a给改成的227俺就没查内存了就不讲了,你只要知道是因为a的空间是4个字符而*p就改了一个字符空间的内容就ok了。
还有指针变量的跨度,这个与类型也是大有关联啊
#includeint main(){
int a=200,b=200;
char* p=&a;
int* k=&a;
printf("%p\n",&a);
printf("%p\n",p+1);
printf("%p\n",k+1);
return 0;
}
char类型的指针+1地址就老老实实的+1而int类型的指针+1地址就直接+4,这就是跨度,+1就是跳到下一个要处理的数据,char类型长度为1字节地址+1就到了下一个数据了int长度为4字节要跳到下一个int数据地址要+4.
ok指针的基本讲解到此结束了啊,指针很有用的,把基础打好后面用起来才会得心应手。
本人也只是一个初学者有不对得地方可以私聊我指教我一二,我不怕错就怕自己找不到.
over。
下午发现有关于文件的作业哎呀,还不会啊(老师您实在是太快了),现学现买,学不好也卖不好555555,
刚好上面学了指针搞起来也没那莫困难,
几个基本的函数格式与运用
1 FILE* fp;文件指针重要的不得了
2 fopen("文件的地址","你想要的操作方式");返回的是指向文件的地址
操作方式有好多的。
所以一般是 fp=fopen("件的地址","你想要的操作方式")
3 fclose(文件指针)关闭你打开的(文件指针所指向的文件)
4 fgetc(fp)从fp指向的文件里面读一个字符
5 fputc(ch,fp)把ch字符放到fp所指向的文件
6 fgets(str ,n,fp)从fp指向的文件读出n-1个字符,因为最后一个是\0
7 fputs(str,fp)把str数组的内容写入到fp所指的文件当中。
来个小题稍微的练一下哈
从磁盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存。#include#include#includeint main(){
FILE *in,*put;
char b[1000];
if((in=fopen("D:\\xunlei\\tap.dat","r"))==NULL){//我不理解为啥我的一定要打\\一个\不可以
printf("无法打开");
exit(0);
}
if(put=fopen("D:\\xunlei\\text.dat","w")==NULL){
printf("无法打开");
exit(0);
}
fgets(b,1001,in);
int h=strlen(b);
for(int p=0;p=97&&b[h]<122){
b[h]=b[h]-32;
}
}
printf("%s",b);
fputs(b,put);
fclose(in);
fclose(put);
return 0;
}
晚上搞了几个题一起来看看
题目描述
给定有n个整数(可能为负整数)组成的序列a1,a2,...,an,求该序列连续的子段和的大值。如果该序列的所有元素都是负整数时定义其大子段和为0。
例如,当(a1,a2,a3,a4,a5)=(-5,11,-4,13,-4-2)时,大子段和为11+(-4)+13=20。
输入
输入数据有多组测试数据。每组测试数据有两行:第一行整数个数N,第二行为N个整数,每个整数之间用一空格隔开。
输出
每个用例,用一行输出大连续子段和。
样例输入
6
-2 11 -4 13 -5 -2
样例输出
20
这本是一个递归的题奈何我没往递归的方向去做所以写的那叫一个啦好在还是做出来了一起看看我的炒鸡写法
#includeint main()
{
int n;
long long a[100000];
while(~scanf("%d",&n))
{ int i=0;
for(int u=0; umax)
max=a[g];
}
for(int k=0; kmax)//中间发现比原来的大段子和大就把它赋给max
max=sum;
}
}
printf("%lld\n",max);
}
}
return 0;
}
思路简单的不行就是复杂度有亿点点高哈,
大概思路 多组输入开头输入的同时判断是否全为复数如果是的直接输出0,如果不是就定义一个max,把当前判断的大段子和赋给max,最后输出。(哈哈哈嗝)
等过几天我把学长的代码看懂了再讲个好的,这个太拉了。
近期,全国ICPC和CCPC赛事正在举行,好奇的jz学姐也想看看这些比赛的题,但是她不好决定看哪个比赛,于是她决定奇数日看ICPC,偶数日看CCPC,现在输入一个x,让你判断今天看ICPC还是CCPC?请你输出ICPC或者CCPC
学姐yyds水的好呀我太喜欢的,谁和以拒绝2分钟的水题。(反正我不行)
#includeint main()
{
long long n;
scanf("%lld",&n);
if(n%2==1)
printf("ICPC");
else
printf("CCPC");
return 0;
}
咔嚓没了(开心的鸭皮)
wcp学长非常喜欢字符串,于是乎他也想考考你是不是也学了串串,现在他给定你两个字符串s和t,如果t是s的子串(s包含t)则输出Yes,否则输出No
输入
两个字符串s和t
输出
Yes或No
样例输入 复制
sss
s
这题的方法就多了解题的思路就是看你咋判断包含的
来康康我是咋写的吧。
#include#includeint f(char x[],char v[]){
int h=strlen(x),m=strlen(v);//得知道长度
char* p=NULL;//搞个指针,今天学的用一练一下下
int i=0;
if(m>h)//都没人家长咋包含人家,返回0.
return 0;
else{
for(int l=0;l&x[h-1])//别越界了这不好
break;
if(*(p+u)==v[u])//指针也往后推看是否对应的,相同就i++
i++;
else{
i=0;
break;
}
}
if(i==m)//i==m就带表从p到p+i-1都相同,也就是包含
return 1;//返回1
}
}
}
return 0;//程序走到这就代表不包含返回0,
}
int main()
{
char x[10000],v[10000];//两个字符串
scanf("%s",x);//输入
scanf("%s",v);
f(x,v);//把它两丢到函数里
int z=f(x,v);
if(z==0)
printf("No\n");
else
printf("Yes\n");
return 0;
}
今天不搞了 ,小命还是有点重要的啊,珍惜身体,拒绝熬夜和拼命爆肝。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧