小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

指針與二維數(shù)組

 520jefferson 2015-05-06

指針就是地址。 
指針的類型決定了指針操作時(shí)該指針指向地址變化的規(guī)律。 
int arr[10], *p; p=arr; 此時(shí)把數(shù)組的地址賦給了指針p,指針p就指向了數(shù)組的首地址。

現(xiàn)在假設(shè)數(shù)組的首地址值是3452,則指針p的值必然是3452。

那么 p 1 表示指針移動(dòng)指向了數(shù)組的下一個(gè)元素,

那么p 1的值等于3452 1==3453?錯(cuò)誤

這里的p 1不是簡單的算術(shù)運(yùn)算,它表示——指針移動(dòng)了一個(gè)整型元素。一個(gè)整型變量占多少字節(jié)內(nèi)存:2 個(gè)字節(jié),所以指針移動(dòng)一個(gè)整型元素后地址值應(yīng)為3452 2,即指針p的值為3454。 


字符型指針: 
char aa[10], *p; p=aa; 同樣假設(shè)數(shù)組的首地址為3452,那么p 1 的值可以這樣考慮,指針移動(dòng)一個(gè)字符的地址,而一個(gè)字符占一個(gè)字節(jié)的內(nèi)存,所以p 1的值就為3452 1=3453。

數(shù)組名代表了數(shù)組的起始地址,如 char arr[5][6]; 那么數(shù)組名 arr就是這個(gè)二維數(shù)組的首地址。這樣的寫法:char arr[5][6], *p; p=arr;是錯(cuò)誤的,

二維數(shù)組名是一個(gè)二級(jí)指針,是地址的地址  
char arr[5][6]; char **p; p=arr;這樣寫同樣是錯(cuò)誤的


例1: 
int arr[4][5];  
int *p; 
p=arr[0];//正確

arr[0]是int一維數(shù)組,arr[0]這個(gè)一維數(shù)組的各元素才是基本的int數(shù)據(jù)類型

下面的寫法: 
char arr[4][5]={"abc","def","ghi","jkl","mno"}; 
char *p=arr[0]; 
for(i=0;i<20;i ) 
printf("%c", *(p i) ); //仔細(xì)觀察輸出的值是怎樣變化的 

1、必須使這個(gè)指針指向與其對(duì)應(yīng)的字符型數(shù)據(jù)類型; 

2、指針每增加一個(gè)單位的地址值 。

printf()語句輸出的結(jié)果為" abcdefghijklmno"   

下面舉一個(gè)整型指針的例子: 
int arr[3][3]={ {1,2,3},{4,5,6},{7,8,9}}; 
int *p=arr[0]; 
for(i=0;i<9;i ) 
printf("%d", *(p i)); // 逐個(gè)的輸出數(shù)組元素

一個(gè)二維數(shù)組的指針?biāo)心男┨攸c(diǎn): 
一個(gè)二維數(shù)組,它的每一個(gè)數(shù)組元素都是一個(gè)一維數(shù)組,

一個(gè)整型二維數(shù)組可以寫為: 
int arr[3][3]; 即 {arr[0], arr[1], arr[2] } 
指針 p指向arr[0],  指針 p 1 指向arr[1] ,指針 p 2指向arr[2],

也就是指針每移動(dòng)一個(gè)單位的地址就指向下一個(gè)一維數(shù)組,

實(shí)際上移動(dòng)一個(gè)一維數(shù)組的長度即3個(gè)整型量。

那么這個(gè)指針可定義為如下形式: 
int (* p) [3] ; // 定義了一個(gè)指向二維數(shù)組的指針,這個(gè)二維數(shù)組中的一維 數(shù)組有3個(gè)元素。 
p=arr; // 把二維數(shù)組的地址賦給指針 p 
char arr[3][4]={"abc","def","ghi"}; 
*(p 0) //是數(shù)駔 a[0] 的首地址 printf("%s", *p); 輸出字符串 “"abc" 
*(p 1) //數(shù)組a[1]的首地址 printf("%s", *(p 1)); 輸出字符串 "def" 
*(p 2) //數(shù)組 a[2]的首地址 printf("%s",*(p 2)); 輸出字符串 "ghi"

如果要用這個(gè)二維數(shù)組的指針逐個(gè)的輸出字符可以寫為: 
*(*(p 0) 0) //第一個(gè)字符 a 
*(*(p 0) 1) //第二個(gè)字符 b 
*(*(p 0) 2) //第三個(gè)字符 c 
*(*(p 0) 3) //第四個(gè)字符 d 
*(*(p 0) 4) //第五個(gè)字符 e 
.................. 依此類推


當(dāng)指針指向結(jié)構(gòu)時(shí)的情形。。。

一個(gè)結(jié)構(gòu)數(shù)組,三個(gè)結(jié)構(gòu): 
struct student

int a;char *b;

}stru[3]=

{

{1,"abc"},

{2,"def"},

{3,"ghi"}

}; 
struct student *p=stru;

p 0 //第一個(gè)結(jié)構(gòu)的地址 
p 1 //第二個(gè)結(jié)構(gòu)的地址 
p 2 //第三個(gè)結(jié)構(gòu)的地址


====================================

定義一個(gè)二維數(shù)組: 
inta[3][4];
表示二維數(shù)組有三行四列共12個(gè)元素,在內(nèi)存中按行存放,每行四個(gè)元素
a是二維數(shù)組的首地址,

&a[0][0]既可以看作數(shù)組0行0列的首地址,同樣還可以看作是二維數(shù)組的首地址,

a[0]是第0行的首地址,當(dāng)然也是數(shù)組的首地址。

同理a[n]就是第n行的首址;&a[n][m]就是數(shù)組元素a[n][m]的地址。
把二維數(shù)組看成是由n行一維數(shù)組構(gòu)成,將每行首地址傳遞給指針變量,行中的其余元素均可由指針來表示。

用地址法來表示數(shù)組各元素的地址。對(duì)元素a[1][2],&a[1][2]是其地址,a[1]+2也是其地址。

分析a[1]+1與a[1]+2的地址關(guān)系,它們地址的差并非整數(shù)1,而是一個(gè)數(shù)組元素的所占位置2,原因是每個(gè)數(shù)組元素占兩個(gè)字節(jié)。
對(duì)0行首地址與1行首地址a與a+1來說,地址的差同樣也并非整數(shù)1,是一行,四個(gè)元素占的字節(jié)數(shù)8。
由于數(shù)組元素在內(nèi)存的連續(xù)存放。給指向整型變量的指針傳遞數(shù)組的首地址,則該指針指向二維數(shù)組。
int *ptr,a[3][4]; 
若賦值:ptr=a;則用ptr++就能訪問數(shù)組的各元素。


//用地址法輸入輸出二維數(shù)組各元素。
#include<stdio.h>
main()
{
     int a[3][4];
     int i,j;
     for(i=0;i<3;i++)
          for(j=0;j<4;j++)
               scanf("%d",a[i]+j);/*地址法*/先輸行,一行滿了之后再輸下一行
     for(i=0;i<3;i++)
    {
         for(j=0;j<4;j++)
         printf("%4d",*(a[i]+j));/**(a[i]+是j地)址法所表示的數(shù)組元素*/
         printf("\n");
     }
}
運(yùn)行程序:
輸入:1 2 3 4 5 6 7 8 9 10 11 12

輸出:

1 2 3 4
5 6 7 8
9 10 11 12


//用指針法輸入輸出二維數(shù)組各元素。

//把二維數(shù)組看作是展開的一維數(shù)組
#include<stdio.h>
main()
{
       int a[3][4],*ptr;
       int i,j;
       ptr=a[0];
       for(i=0;i<3;i++)
           for(j=0;j<4;j++)
               scanf("%d",ptr++);/*指針的表示方法*/
       ptr=a[0];  //重新指向數(shù)組第0行
       for(i=0;i<3;i++)
       {
            for(j=0;j<4;j++)
                printf("%4d",*ptr++);
            printf("\n");
       }
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多