一:概念
指針類型:指示內存地址的數據類型;
指針變量:存放內存地址的變量(簡稱"指針");
二:指針變量的定義
1.格式:
指針的類型 *變量名/*"*"是指針說明符*/;
如:
int *p;
int *a[100];
char *s;
2.結構體指針:
如:
struct node{
int data;
node *next;
}*p;
三:指針運算符(2個)
1.取地址(&):&後是普通變量(非雙指針);
2.取內容(*):*表示指針所指向的變量.如*後是指針;
程序中:
指針:p
指針所取變量:*p
結構指針的成員兩種寫法:
(1): (*p).m;
(2): p->m;
四:指針的使用
1.指針賦值:給指針一個地址
如:
p=&a;
p=arr;
p=p1;
p=NULL;
2.指針的運算(加或減一個整數)/*是地址內存字節數的+,-*/:
如:
p++;
p--;
p+=i;
p-=i;
r=p+i;
r=p-i;
3.兩指針相減/*求出距離*/;
4.兩指針比較;
5.*p和普通變量一樣用:
如:
*p=10000;
*p+=*p1;
*p=n/z;
五:動態變量
當指針指向一塊無名的內存空間,就形成了一個動態變量;
形如:*p
生成一個指定類型的動態變量:
格式:變量名=new 數據類型;
功能:生成一個指定類型的動態變量;
如:p=new int[10];
p=new node;
如給一個動態數組存入n個元素:
int n,*p;
scanf("%d",&n);
p=new int[n];
for(int i=0;i<n;i++){
*p=rand()%90+10;
printf("%d ",*p++);
}
注意區別:
動態數組是一個指針;
指針數組是一組指針;
六:指針與字符串
一個串的兩種訪問形式:
1.字符數組,如:char s[]="China";
2.串指針,如:char *s="China";
例一:較出串的10個字符後的所有字符
入:this is a book
出:book
例二:把串a複製給串b,不用strcpy
char *a,*b;
gets(a);
b=a;/*b指向a*/
puts(b);
注意:
字符數組,指針進行串處理的區別:
1.串指針是一個變量,存放的是串的首地址。
字符數組是多個字符變量組成的,存放整個串,數組名是串首地址。
2.對串指針:char*s; s="china";√
對字符數組:char s[1000]; s="china";×
七:指針數組
例:輸入n個國名,按詞典順序輸出。
char *g[100];
int n,i;
void px(char *g[]){
char *p;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n=j++)
if(strcmp(g[i],g[j])>0){
p=g[i];
g[i]=g[j];
g[j]=p;
}
}
int main(){
scanf("%d\n",&n);
for(i=0;i<n;i++){
g[i]=new char;
gets(g[i]);
}
px(g);
for(i=0;i<n;i++)
printf("%d ",g[i]);
return 0;
}
指針類型與動態變量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.