c语言之指针数组理解三

直接给出例子:

//打印指针
void PrintArryData(char** arry, int cnt){
	for (int i = 0; i < cnt; i++){
		printf("%s\n", *(arry + i));
	}
}

//交换内存地址(指针指向)
void SortArryData(char** arry, int cnt){
	char* tmp = NULL;
	for (int i = 0; i < cnt; i++){
		for (int j = i + 1; j < cnt; j++){
			if (strcmp(arry[i], arry[j]) < 0){
				tmp = arry[i];
				arry[i] = arry[j];
				arry[j] = tmp;
			}
		}
	}
}


//释放申请的内存空间 这里是先申请 后释放;
void FreeMalloc(char** arry, int cnt){
	for (int i = 0; i < cnt; i++){
		if (arry[i] != NULL){
			free(arry[i]);
			arry[i] = NULL; //避免野指针
		}
	}

	if (arry != NULL){
		free(arry);
		arry = NULL;
	}
}

//分配内存
char** GetMallocMemory(int cnt){

	char** tmp = NULL;
	tmp = (char**)malloc(sizeof(char*)*cnt);
	for (int i = 0; i < cnt; i++){
		tmp[i] = (char*)malloc(sizeof(char)* 20);
		sprintf_s(tmp[i], 15, "%s%d", "Rose_Girls", i);
	}
	return tmp;
}


void main(){


	int num = 3;
	//定义一个指针变量 初始值为空
	char **arry = NULL;
	//申请内存空间,把申请的内存空间首地址赋值给arry;
	arry = GetMallocMemory(num);
	PrintArryData(arry, num);
	SortArryData(arry, num);
	printf("*******************\n");
	PrintArryData(arry, num);
	FreeMalloc(arry, num);

	system("pause");
}


如下内存草图:

c语言之指针数组理解三_第1张图片

 

你可能感兴趣的:(内存,C语言,指针,指针数组)