数组指针的分析

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");

}

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