好文档 - 专业文书写作范文服务资料分享网站

C语言进阶知识总结讲义

天下 分享 时间: 加入收藏 我要投稿 点赞

轻松入门 实战应用 技术交流群387220290

4.2数组类型和多维数组本质 4.2.1数组概念

概念

? 1)元素类型角度:数组是相同类型的变量的有序集合 测试指针变量占有内存空间

大小

? 2)内存角度:联系的一大片内存空间

轻松入门 实战应用 技术交流群387220290

数组初始化

? //数组元素的个数可以显示或隐式指定 ? //分析数组初始化{0}与memset比较

int main() { int i = 0; }

int a[10] = {1,2}; //其他初始化为0 int b[] = {1, 2}; int c[20] = {0}; for (i=0; i<10; i++) { printf(\ }

memset(a, 0, sizeof(a)); getchar(); return 0;

数组名的技术盲点

? 1)数组首元素的地址和数组地址是两个不同的概念 ? 2)数组名代表数组首元素的地址,它是个常量。

? 解释如下:变量本质是内存空间的别名,一定义数组,就分配内存,内存就固定了。所以数组名起名以后就不能被修改了。

? 3)数组首元素的地址和数组的地址值相等 ? 4、怎么样得到整个一维数组的地址?

C语言规定: Int a[10];

printf(\得到整个数组的地址a: %d \\n\ printf(\数组的首元素的地址a: %d \\n\

怎么样表达int a[10]这种数据类型那?

4.2.2数组类型、数组指针类型、数组指针类型变量

数组类型

? 1数据类型分为基础、非基础,思考角度应该发生变化

轻松入门 实战应用 技术交流群387220290

? 2 C语言中的数组有自己特定的类型

? 数组的类型由元素类型和数组大小共同决定 ? 例:int array[5]的类型为int[5]

/* typedef int(MYINT5)[5]; //int typedef float(MYFLOAT10)[10]; 数组定义: MYINT5i Array; int array[5]; MYFLOAT10fArray */

? 3定义 数组类型,并用数组类型定义变量

int main() { typedef int(MYINT5)[5]; int i = 0; MYINT5 array; for (i=0; i<5; i++) { array[i] = i; } for (i=0; i<5; i++) { printf(\ } getchar(); return 0; }

数组指针类型

? 数组指针用于指向一个数组 int a[10]

数组名是数组首元素的起始地址,但并不是数组的起始地址 通过将取地址符&作用于数组名可以得到整个数组的起始地址 //定义数组指针 有两种

轻松入门 实战应用 技术交流群387220290

1)通过数组类型定义数组指针: typedef int(ArrayType)[5]; int *a ArrayType* pointer;

2) 声明一个数组指针类型 typedef int (*MyPointer)[5]; MyPointer myPoint;

3)直接定义:int (*pointer)[n];

pointer 为数组指针变量名 type n

为指向的数组的类型 为指向的数组的大小

注意这个地方是type类型(比如 int (*pointer)[10])

? 数组指针:用数组类型加*定义一个数组指针

//1 { int a[5]; //声明一个数组类型 typedef int(MYINT5)[5]; //用数组类型 加*,定义一个数组指针变量 MYINT5 *array; array = &a; for (i=0; i<5; i++) { (*array)[i] = i; } // for (i=0; i<5; i++) { printf(\ } }

? 数组指针:定义一个数组指针类型,然后用类型定义变量 {

int b[5];

//声明一个数组指针类型 typedef int (*MyPointer)[5];

//用数组指针类型,去定义一个变量 MyPointer mypoint ;

轻松入门 实战应用 技术交流群387220290

}

mypoint= &b; for (i=0; i<5; i++) { (*mypoint)[i] = i; } //

for (i=0; i<5; i++) { printf(\ }

? //3数组指针:直接定义一个数组指针变量 { int c[5]; }

//直接声明一个数组指针变量 int (*pointer)[5] = &c; for (i=0; i<5; i++) { (*pointer)[i] = i; }

for (i=0; i<5; i++) { printf(\ }

4.2.3多维数组本质技术推演

int a[10];

char myarray[3][5] PK int (*p)[5] myarray名称到底是什么?

多维数组char a[i][j] ==> *(*(a+i)+j)转换技巧分析 void main222() { int a[3][5]; int c[5]; //&c + 1; int b[10]; //b代表数组首元素的地址 &b代表这个数组的地址 &b+1相当于 指针后移4*10个单位 //a代表什么什么那?a是一个数组指针 指向低维数组的指针

C语言进阶知识总结讲义

轻松入门实战应用技术交流群3872202904.2数组类型和多维数组本质4.2.1数组概念概念?1)元素类型角度:数组是相同类型的变量的有序集合测试指针变量占有内存空间大小?2)内存角度:联系的一大片内存空间<
推荐度:
点击下载文档文档为doc格式
38pl56jphj5dq8n1sig30fluh9boav00ulx
领取福利

微信扫码领取福利

微信扫码分享