程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 數組-指針-引用

數組-指針-引用

編輯:關於C語言

一、指針的概念

指針是內存中的地址。

1、語法:類型 * 變量名
這裡的類型是定義了這個指針指向的變量類型。

2、指針的運算符(*和&)
<1>&取地址符
例如:
int counta=100;
int * mm;
mm=&counta;
假設counta所在地址是2000,這是候m=2000。
#include
void main()
{
int counta=100;
int * mm;
mm=&counta;
cout < }
<2>*返回這個地址的值,與&正好相反。
#include
void main()
{
int p,counta=100;
int * mm;
mm=&counta;
p=* mm;
cout < }
3、指針的賦值

#include
void main()
{
int x;
int * p1,* p2;
p1=&x;
p2=p1;
cout < }

結果:0x0012FF7C
4、指針的運算
指針的++與--是將指針的地址移動所屬變量類型位數。

char 8
int 16
long 32
float 32
double 64
5、指針與數組

數組聲明:類型 變量名[長度]

沒有下標的“一維”數組名就是一個指向該數組第一個元素的指針。

#include
void main()
{
int x[3]={1,2,3};
int * p1;
p1=x;
cout < }
a、等價關系:

如:char c[10];
c 和 &c[0] 是等價的。

再如:char c[2][3];
c 和 &c[0][0] 是等價的。
*(c+12) 和 &c[1][2] 是等價的。

b、數組與指針的關系

1>一維數組的指針

#include
void main()
{
int x[2]={1,2};
int * p1;
p1=x;
cout <<* p1<<"\n";
cout <<* (p1+1)<<"\n";
}

2>二維數組的指針

#include
void main()
{
int
x[2][3]={1,2,3,4,5,6};
//int x[2]={1,2};
int * p1;
p1=&x[0][0]; //二維數組給指針不能用"p1=x"這個來賦值,只能是“p1=x[2]”
cout < cout < cout < cout < cout < cout < cout <<* p1<<"\n";
cout <<* (p1+1)<<"\n";
cout <<* (p1+2)<<"\n";
cout <<* (p1+3)<<"\n";
cout <<* (p1+4)<<"\n";
cout <<* (p1+5)<<"\n";
//規律:* (p1+((1*3)+2))
}

思考:指針是地址,那麼如果想得到某地址的變量用什麼方法。

二、將引用和指針相比較

引用是變量的別名。

#include
void main()
{
int * p1,a=100;
int & y1=a; //必須直接賦值
p1=&a;
y1=a;
cout <<* p1<<"\n";
cout < }

指針和引用可以達到同樣的效果。

#include
void main()
{
void funca(int & vala);
void funcp(int * valp);
int a=100,b=100;
int & y1=a; //必須直接賦值,而且只能賦值一次
funca(a);
funcp(&b);
cout < cout < }
void funca(int & vala)
{
vala=200;
}
void funcp(int * valp)
{
* valp=500;
}

三、*和&的用途,避免這些符號在使用上發生混淆

1、*的作用:

1>乘號
2>指針定義符號
3>返回某個地址的值

2、&的作用:

1>位運算中的“與”
2>取地址符
3>引用

本文出自 ““純真”程序員俱樂部” 博客,轉載請與作者聯系!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved