数组指针的分析

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值