C語言指標深度剖析

2021-08-21 03:14:21 字數 2696 閱讀 1380

1.下標法,用a[i]來訪問陣列元素; 

2.指標法,(ptr+i)形式間接訪問; 

3.陣列名,用(a+i)形式訪問陣列; 

4.指標下標法,ptr[i]形式訪問陣列元素;

# 1.直接訪問法

printf("%d",a[i][j]);

# 2.指標訪問法

int *ptr;ptr=a[0]; 

for(i=0;i<3;i++) 

for(j=0j<4;j++) 

scanf("%d",ptr++);

型別說明符(*指標變數名)[長度]; 

int a[3][4]=,,18,20,22,24}; 

int (ptr)[4]; 

ptr=a; 

for(i=0;i<3;i++) 

for(j=0j<4;j++) 

printf("%4d",((ptr+i)+j)); 

其中(a+i)+j是二維陣列a的i行j列的首位址。其元素的值為((a+i)+j);

//函式指標變數的的定義形式一般為: 型別說明符 (*指標變數名)(); 

int add(int a,int b)

void result(int (*ptr)(),int a,int b)

int main()

型別說明符 *函式名(形參表)  

例如:int *pfun(int x,int y)

void main()

5.字元指標與字元陣列的區別

(1)字元指標本身是乙個變數,它的值可以改變,而字元陣列的陣列名雖然代表該陣列的首位址,但它是常量,它的值不能改變。 

(2)賦初值所代表的意義不同 

對於字元指標 

char *ptr="hello world"; 

char *ptr,ptr="hello world";

對字元陣列進行初始化 

char str="hello world";不能寫為char str[80];str="hello world";
實際賦值時,只能對字元陣列的各個元素逐個賦值

對於字元陣列可以這樣使用 

char str[80]; 

scanf("%s",str); 

對於字元指標,應申請分配記憶體,取得確定位址 

char *str; 

str=(char *)malloc(80); 

scanf("%s",str); 

這個情況會使程式很不穩定 

char *str; 

scanf(「%s」,str);

型別說明 *陣列名[陣列長度];

例如:char*str[4];   指該指標陣列包含4個指標。 

#include void main() 

;  int i,*ptr2[3],a[3]=,b[3][2]=; 

for(i=0;i<4;i++) 

printf("\n%s",ptr1[i]); 

printf("\n"); 

for(i=0;i<3;i++) 

ptr2[i]=&a[i]; 

for(i=0;i<3;i++) 

printf("%4d",*ptr2[i]); 

printf("\n"); 

for(i=0;i<3;i++) 

ptr2[i]=b[i]; 

for(i=0;i<3;i++) 

printf("%4d%4d\n",*ptr2[i],*ptr2[i]+1); 

}

型別說明符 **指標變數名;

例如: 

float **ptr; 

其含義是定義乙個指標變數ptr,它指向另乙個指標變數(該指標變數又指向乙個實形的變數)

由於指標運算子 * 是自右向左結合,所以上述定義相當於: 

float * *ptr;

int i,j,a[10],b[5][9],*p,*q,(*pi)[9],*pa[5]; 

char *ps; 

char pas=; //字元常量的首位址分別賦給指標陣列pas[0],pas[1],pas[2]; 

p=&i; //將一變數位址賦給指標變數p 

q=p; //p和q是指標變數,將p的值賦給q; 

q=null; //將null空指標賦給指標變數q; 

p=(int)malloc(5*sizeof(int));//分配10個位元組的儲存單元,並把首位址賦給p 

p=a;//將a的首位址賦給指標變數p; 

p=&a[i];//將一維陣列a的第i個元素賦給指標變數p 

p=&b[i][j];//將二維陣列b[i][j]的位址賦給變數p 

pi=b+i;//等價pi=&b[i],將pi指向二維陣列b的第i行 

for(i=0;i<5;i++) 

pa[i]=b[i];//分別將二維陣列b的第i行的第0列元素賦給 

ps="hello";//將字串常量賦給指標變數ps。

C語言深度剖析指標

1.指標是什麼?在電腦科學中,指標是程式語言中的乙個物件,利用位址,它的值直接指向存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為 指標 意思是通過它能找到以它為位址的記憶體單元。記憶體 最小記憶體單元 bit 1byte 8bi...

深度剖析C語言的各種指標

該文章詳解了c語言中指標的概念與用法,對初學者了解c語言中指標這一重要概念有很大的幫助,其中變數的定義與使用一節尤為有價值。要點如下 1.指標是個變數,本質代表了乙個位址。2.變數拆解遵循由近到遠,從左到右的原則。3.c語言中,變數怎麼使用就怎麼定義 指的是書寫格式上保持一致 在c語言中,指標就是乙...

C語言深度剖析

c語言深度剖析 1,編譯器通常不為普通const唯讀變數分配儲存空間,而是將他們儲存在符號表中,使得它成為乙個編譯期間的值,沒有了儲存與讀記憶體的操作,使得它的效率更高。2,const int p p可變,p指向的物件不變。int const p p可變,p指向的物件不可變 int const p ...