今天學(xué)點(diǎn)東西,拿指針開刀,我是不會(huì)告訴你是因?yàn)槲疑险n的時(shí)候沒聽明白,我覺得上課就聽明白的人一定是天賦哥!?。。ňW(wǎng)上的老師太膩害了推薦b站的c語言編程學(xué)習(xí))
創(chuàng)新互聯(lián)是專業(yè)的濱湖網(wǎng)站建設(shè)公司,濱湖接單;提供做網(wǎng)站、成都網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行濱湖網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!首先明白指針變量是個(gè)啥,我不用太官方的話了,為了簡單易懂就直接一點(diǎn)啦,變
重點(diǎn)來了:指針變量就是保存其他變量(可以是普通的變量也可以是指針變量)的地址
int* p;
一個(gè)指針變量就長這樣不過這個(gè)指針變量沒有初始化,是一個(gè)野指針(不是好東西)。?
指針變量也是有類型的但它們的大小都一樣
#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個(gè)字節(jié),在64位上是8個(gè)字節(jié)(因?yàn)槭潜4娴刂?,地址的長度代表指針的保存的長度)
ok 接下來來講一下 指針的符號(hào)和最最簡單的運(yùn)用
*這是一個(gè)解引用的符號(hào)
如果不理解那是不是因?yàn)槟闫綍r(shí)看到的定義指針變量的是這樣的
int *p=NULL;
讓你感到迷糊 換一個(gè)寫法
int* p=NULL;
這就好理解多了
int*是定義指針的類型,而p是指針變量
&取地址符,這個(gè)不多講,都懂的啦
了解基本的操作來寫個(gè)最簡單的
#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就是的對(duì)a地址中的類容進(jìn)行操作了。
接下來就是指針類型的區(qū)別了,你一定要明白基本數(shù)據(jù)類型所占的空間大小,看我演示給你看看
#includeint main(){
int a=200;
char* p=&a;
*p=1008611;
printf("%d",a);
return 0;
}
就變成這樣了為啥呢,應(yīng)為數(shù)據(jù)類型為int 占了4個(gè)字節(jié)而char類型的指針就操作和char空間長度一樣的范圍,也就是一個(gè)字符的長度。而如果是int*的話就可以操作4個(gè)字符的空間完成修改。
#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俺就沒查內(nèi)存了就不講了,你只要知道是因?yàn)閍的空間是4個(gè)字符而*p就改了一個(gè)字符空間的內(nèi)容就ok了。
還有指針變量的跨度,這個(gè)與類型也是大有關(guān)聯(lián)啊?
#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地址就老老實(shí)實(shí)的+1而int類型的指針+1地址就直接+4,這就是跨度,+1就是跳到下一個(gè)要處理的數(shù)據(jù),char類型長度為1字節(jié)地址+1就到了下一個(gè)數(shù)據(jù)了int長度為4字節(jié)要跳到下一個(gè)int數(shù)據(jù)地址要+4.
ok指針的基本講解到此結(jié)束了啊,指針很有用的,把基礎(chǔ)打好后面用起來才會(huì)得心應(yīng)手。
本人也只是一個(gè)初學(xué)者有不對(duì)得地方可以私聊我指教我一二,我不怕錯(cuò)就怕自己找不到.
over。
下午發(fā)現(xiàn)有關(guān)于文件的作業(yè)哎呀,還不會(huì)啊(老師您實(shí)在是太快了),現(xiàn)學(xué)現(xiàn)買,學(xué)不好也賣不好555555,
剛好上面學(xué)了指針搞起來也沒那莫困難,
幾個(gè)基本的函數(shù)格式與運(yùn)用
1 FILE* fp;文件指針重要的不得了
2 fopen("文件的地址","你想要的操作方式");返回的是指向文件的地址
操作方式有好多的。
所以一般是 fp=fopen("件的地址","你想要的操作方式")
3 fclose(文件指針)關(guān)閉你打開的(文件指針?biāo)赶虻奈募?4 fgetc(fp)從fp指向的文件里面讀一個(gè)字符
5 fputc(ch,fp)把ch字符放到fp所指向的文件
6 fgets(str ,n,fp)從fp指向的文件讀出n-1個(gè)字符,因?yàn)樽詈笠粋€(gè)是\0
7 fputs(str,fp)把str數(shù)組的內(nèi)容寫入到fp所指的文件當(dāng)中。
來個(gè)小題稍微的練一下哈
從磁盤輸入一個(gè)字符串,將其中的小寫字母全部轉(zhuǎn)換成大寫字母,然后輸出到一個(gè)磁盤文件test中保存。#include#include#includeint main(){
FILE *in,*put;
char b[1000];
if((in=fopen("D:\\xunlei\\tap.dat","r"))==NULL){//我不理解為啥我的一定要打\\一個(gè)\不可以
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;
}
晚上搞了幾個(gè)題一起來看看
題目描述
給定有n個(gè)整數(shù)(可能為負(fù)整數(shù))組成的序列a1,a2,...,an,求該序列連續(xù)的子段和的大值。如果該序列的所有元素都是負(fù)整數(shù)時(shí)定義其大子段和為0。
例如,當(dāng)(a1,a2,a3,a4,a5)=(-5,11,-4,13,-4-2)時(shí),大子段和為11+(-4)+13=20。
輸入
輸入數(shù)據(jù)有多組測試數(shù)據(jù)。每組測試數(shù)據(jù)有兩行:第一行整數(shù)個(gè)數(shù)N,第二行為N個(gè)整數(shù),每個(gè)整數(shù)之間用一空格隔開。
輸出
每個(gè)用例,用一行輸出大連續(xù)子段和。
樣例輸入
6
-2 11 -4 13 -5 -2
樣例輸出?
20
這本是一個(gè)遞歸的題奈何我沒往遞歸的方向去做所以寫的那叫一個(gè)啦好在還是做出來了一起看看我的炒雞寫法
#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)//中間發(fā)現(xiàn)比原來的大段子和大就把它賦給max
max=sum;
}
}
printf("%lld\n",max);
}
}
return 0;
}
思路簡單的不行就是復(fù)雜度有億點(diǎn)點(diǎn)高哈,
大概思路? 多組輸入開頭輸入的同時(shí)判斷是否全為復(fù)數(shù)如果是的直接輸出0,如果不是就定義一個(gè)max,把當(dāng)前判斷的大段子和賦給max,最后輸出。(哈哈哈嗝)
等過幾天我把學(xué)長的代碼看懂了再講個(gè)好的,這個(gè)太拉了。
近期,全國ICPC和CCPC賽事正在舉行,好奇的jz學(xué)姐也想看看這些比賽的題,但是她不好決定看哪個(gè)比賽,于是她決定奇數(shù)日看ICPC,偶數(shù)日看CCPC,現(xiàn)在輸入一個(gè)x,讓你判斷今天看ICPC還是CCPC?請(qǐng)你輸出ICPC或者CCPC
學(xué)姐yyds水的好呀我太喜歡的,誰和以拒絕2分鐘的水題。(反正我不行)
#includeint main()
{
long long n;
scanf("%lld",&n);
if(n%2==1)
printf("ICPC");
else
printf("CCPC");
return 0;
}
咔嚓沒了(開心的鴨皮)
wcp學(xué)長非常喜歡字符串,于是乎他也想考考你是不是也學(xué)了串串,現(xiàn)在他給定你兩個(gè)字符串s和t,如果t是s的子串(s包含t)則輸出Yes,否則輸出No
輸入
兩個(gè)字符串s和t
輸出
Yes或No
樣例輸入?復(fù)制
sss
s
這題的方法就多了解題的思路就是看你咋判斷包含的
來康康我是咋寫的吧。
#include#includeint f(char x[],char v[]){
int h=strlen(x),m=strlen(v);//得知道長度
char* p=NULL;//搞個(gè)指針,今天學(xué)的用一練一下下
int i=0;
if(m>h)//都沒人家長咋包含人家,返回0.
return 0;
else{
for(int l=0;l&x[h-1])//別越界了這不好
break;
if(*(p+u)==v[u])//指針也往后推看是否對(duì)應(yīng)的,相同就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];//兩個(gè)字符串
scanf("%s",x);//輸入
scanf("%s",v);
f(x,v);//把它兩丟到函數(shù)里
int z=f(x,v);
if(z==0)
printf("No\n");
else
printf("Yes\n");
return 0;
}
今天不搞了 ,小命還是有點(diǎn)重要的啊,珍惜身體,拒絕熬夜和拼命爆肝。?
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧