數組指針的分析

int main01()

{

int i = 0;

//a代表數組首元素的地址,不是整個數組的地址

//&a表示整個數組的地址 &a a代表的數據類型不一樣

//&a 數組類型 int[10]

//a 數組首元素的類型

int a[10] = {1,2}; //其他初始化爲0

int b[] = {1,2};

int c[20] = {0}; //編譯期間搞定

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

{

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

}

memset(a,0, sizeof(a)); //手工的賦值

system("pause");

/**/

 

return 0;

}

 

void main02()

{

int i = 0;

//我聲明瞭一個數組類型

typedef int(MyArr5)[5];  

int a;// &a;

//用數據類型定義一個變量

MyArr5 arr5; //相當於int arra[5];

 

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

{

arr5[i] = i+1;

}

 

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

{

printf("%d \n", arr5[i]);

}

printf("%d\n", sizeof(arr5));

//解決指針步長問題

printf("%d %d\n", &arr5, &arr5 + 1);//跨過整個數組,步長爲5*4

system("pause");

}

三種定義數組指針的方法:

1)定義一個數組類型,利用它來定義它的指針

//我聲明瞭一個數組類型 (固定大小內存塊的別名)

typedef int(MyArr5)[5];  

//定義一個指向數組類型的指針變量

MyArr5 *pArray;// &a;

MyArr5 *pArray = &a1

2)直接定義一數組指針類型

typedef int(*MyArr5)[5];  

MyArr5 pArray

pArray myP = &a

3)不聲明,直接定義數組指針

   int (*Myarr)[5] = &a

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

 

int get(char *const p)

{

 

}

/*

typedef struct _Teacher

{

char name[64];

int age ;

}Teacher, *pTeacher;

pTeacher t1;

*/

void main()

{

int a;

int *p = NULL;

int i = 0;

 

//我聲明瞭一個數組類型 (固定大小內存塊的別名)

typedef int(MyArr5)[5];  

//定義一個指向數組類型的指針變量

MyArr5 *pArray;// &a;

 

 

 

{

int j = 0; 

int *pI = &j;

}

{

//int buf[10][30]

//a1代表數組首元素的地址(不是整個數組的地址),請問a1 指針變量

//1變量-->2指針變量--》 3常量指針變量 (常量指針)

//結論:不能被隨便的改變指針變量的值(不能隨便的改變指針的指向)

//爲什麼它是一個const  

 

//4在定義a1[5]的時候,編譯器分配內存,爲了能順利的回收內存,爲了有機會讓編譯器拿到原始內存首地址。

//編譯器就把a1做成const量。

//不能深入的理解c指針各種現象,是產生bug的根源

 

int a1[5] = {1,3,4,55, 6};

//char *p = &a1;

//a1 = 0x11; 

 

//給數組指針賦值 需要。。。&a1

MyArr5 *pArray = &a1; //4個字節

//用數組指針去遍歷數組

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

{

//a1[i] = i;

// = i;

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

}

}

 

 

{

//直接定義一個 數組指針類型 用這個類型定義指針變量

//我聲明瞭一個數組類型 (固定大小內存塊的別名)

typedef int(MyArr5_1)[5];  

//定義一個指向數組類型的指針變量

//聲明一個 數組指針類型

typedef int (*PMyArr5)[5]; 

PMyArr5 myP = NULL;

 

int b[5] = {1,3,4,55, 6};

 

myP = &b;

 

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

{

//a1[i] = i;

// = i;

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

}

}

 

 

{

int c[5] = {1,3,4,55, 6};

//定義一個指向數組的指針變量

int (*myparra)[5] = &c;

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

{

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

}

}

system("pause");

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章