二级指针的输入和输出模型
指针的输入:主调函数分配内存
指针输出 :被调用函数分配内存
指针做输入第一种模型
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
// 二级指针做输入
// array 数组每一个元素是指针 1.排序2。指针做函数参数排序 3.画出内存四区
void printMyArray1(char** myArray, int num)
{
int i = 0;
for (i = 0; i < num; i++)
{
printf("%s\n", myArray[i]);
}
}
void sortMyArray1(char** myArray, int num)
{
int i = 0, j = 0;
char* tmp = NULL;
for (i = 0; i < num; i++)
{
for (j = 0; j < num; j++)
{
if (strcmp(myArray[i], myArray[j]) > 0)//注意:交换的是数组元素 交换的是指针的值
{
tmp = myArray[i];
myArray[i] = myArray[j];
myArray[j] = tmp;
}
}
}
}
void main01()
{
int i = 0,j=0;
int num = 0;
char* tmp = NULL;
//数组中每一个元素是指针 种子很数组
char* myArray[] = { "aaaaa", "bbbb", "cccc", "1111" };
// 求长度 打印
num = sizeof(myArray) / sizeof(myArray[0]);
printf("before:\n");
for (i = 0; i < num; i++)
{
printf("%s\n", myArray[i]);
}
//排序
//for (i = 0; i < num; i++)
//{
// for (j = 0; j < num; j++)
// {
// if (strcmp(myArray[i], myArray[j])>0)//注意:交换的是数组元素 交换的是指针的值
// {
// tmp = myArray[i];
// myArray[i] = myArray[j];
// myArray[j] = tmp;
// }
//
// }
//}
sortMyArray1(myArray, num);
printf("after:\n");
//数组做函数参数退化为指针
printMyArray1(myArray, num);
printf("hello\n");
printf("pause\n");
// 使程序在 Windows 上暂停
system("pause");
}
int main()
{
main01(); // 调用 main01 函数
return 0;
}
交换的是指针的值
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main()
{
int i = 0; int j = 0;
int num = 4;
char mybuf[30];
char myArray[10][30] = { "aaaa","bbbb","cccc","1111" };
char tmpbuf[30];
//打印
printf("before\n");
for (i = 0; i < num; i++)
{
printf("%s\n", myArray[i]);
}
//排序
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (strcmp(myArray[i], myArray[j]) > 0)
{
strcpy(tmpbuf, myArray[i]);//交换指针地址
strcpy(myArray[i], myArray[j]);
strcpy(myArray[j], tmpbuf);
}
}
}
printf("after\n");
for (i = 0; i < num; i++)
{
printf("%s\n", myArray[i]);
}
printf("hello");
return;
}
指针做函数参数
二维数组相当于指针 直接把二维数组变量求sizeof 相当于告诉编译器分配300内存
myArray【0】相当于每一行 =30
size 求多少行
编译器只
关心往后跳多少个步长