牛骨文教育服务平台(让学习变的简单)
博文笔记

C语言的二维数组和二级指针的理解

创建时间:2016-08-21 投稿人: 浏览次数:704

1.数组本质

    int a[5] 一维数组名代表数组首元素的地址

    int a[5] ===> a的类型为int*

    二维数组名同样代表数组首元素的地址

    int b[2][5]===>b的类型为int(*)[5]

 注:二维数组名 char array[10][100] 是一个数组指针,char (*)[100]

2.二级指针的第一种内存模型:

/**
作者:一叶扁舟
时间:23:03 2016/8/20
作用:练习二维数组的第一种内存模型理解
**/
#include"stdio.h"
#include "stdlib.h"
#include "string.h"

//输出二维数组的数据
void printArray(char **myArray, int num){
	for (int i = 0; i < num; i++){
		printf("%s 
", myArray[i]);
	}
}

//从大到小的排列
void sortArray(char **myArray, int num){
	char  *temp;
	for (int i = 0; i < num; i++){
		for (int j = i + 1; j < num; j++){
			
			if (strcmp(myArray[i], myArray[j])>0){
				temp = myArray[i];
				myArray[i] = myArray[j];
				myArray[j] = temp;
			}		
		}
	}

}

int main(){
	//二维数组指针
	char *arrayData[] = { "315", "3415", "afaaa", "9888", "addddd" };

	printf("排序之前:
");
	printArray(arrayData, 5);
	printf("排序之后:
");
	sortArray(arrayData, 5);
	printArray(arrayData, 5);


	system("pause");
	return 0;
}


运行结果:


3.二级指针的第二种内存模型:

/**
作者:一叶扁舟
时间:20:00 2016/8/21
作用:二维数组的第二种理解
**/
#include"stdio.h"
#include "stdlib.h"
#include "string.h"


//输出函数
void printArray2(char arrayData[10][100],int num){
	for (int i = 0; i < num; i++){
		printf("%s
",arrayData[i]);
	}

}
//字符串排序函数
void sortArray(char arrayData[10][100], int num){

	char buff[100];

	for (int i = 0; i < num; i++){
		for (int j = i + 1; j < num; j++){
			if (strcmp(arrayData[i], arrayData[j])>0){
				strcpy_s(buff, arrayData[i]);
				strcpy_s(arrayData[i], arrayData[j]);
				strcpy_s(arrayData[j], buff);
			}
		}
	}

}



int main(){
	//二维数组指针
	char arrayData[10][100] = { "34d15", "3415", "afaaa", "9888", "addddd" };

	printf("排序之前----:
");
	printArray2(arrayData, 5);

	sortArray(arrayData, 5);
	printf("排序之后----:
");
	printArray2(arrayData, 5);

	system("pause");
	return 0;
}

运行结果:


4.二级指针的第三种内存模型:

/**
作者:一叶扁舟
时间:20:44 2016/8/21
作用:二维数组和二维指针的第三种理解
**/
#include"stdio.h"
#include "stdlib.h"
#include "string.h"



void printArray3(char **arrayData,int num){
	for (int i = 0; i < num; i++){
		printf("%s
",arrayData[i]);
	}
}
int main(){
	int num = 10;
	//在堆中申请内存空间
	char **arrayData = (char **)malloc(num * sizeof(char*));//相当于char array[10]; ;
	if (arrayData == NULL){
		printf("分配内存失败
");
		return 0;
	}
	for (int i = 0; i < num; i++){
		arrayData[i] = (char*)malloc(100 * sizeof(char));
		if (arrayData[i] == NULL){
			printf("分配二维数组内存失败
");
			return 0;
		}
		//将数据打到缓存中
		sprintf(arrayData[i], "%d,%d,%d,%d", i + 5, i * 2, i * 3, i*i*i);
	}

	//打印出数据
	printf("二维数组和二维指针的第三种用法:
");
	printArray3(arrayData, num);
	system("pause");
	return 0;
}


运行结果:



声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。