您的位置:首页 > 其它

C提高_day03_二级指针做输入第2种内存模型

2015-11-13 18:08 405 查看
#include <stdlib.h>
#include <string.h>
#include <stdio.h>


//打印  排序
//封装成函数
void main()
{
int i = 0, j = 0;
int num = 4;
char tmpBuf[30];
char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbb", "1111111111111"};

//打印
printf("排序之前\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("排序之后\n");
for (i=0; i<num; i++)
{
printf("%s\n", myArray[i]);
}

printf("hello...\n");
system("pause");
return ;
}


 

封装后:

#include <stdlib.h>


#include <string.h>


#include <stdio.h>




//问题的本质是:dm03_二级指针做输入_第2种内存模型 的 myArray + 1 和
// dm03_二级指针做输入_第1种内存模型   myArray + 1 不一样 ;
//指针的步长不一样  指针所指向的内存空间的数据类不一样 。。。。
void printMyArray02_err(char **myArray, int num)
{
int i = 0;
for (i=0; i<num; i++)
{
//printf("%s \n", myArray[i]);
printf("%s \n", *(myArray+i) );  //
}
}

void printMyArray02(char myArray[10][30], int num)
{
int i = 0;
for (i=0; i<num; i++)
{
//printf("%s \n", myArray[i]);
printf("%s \n", *(myArray+i) );  //
}
}

//交换的是内存块。。。。。。。。
void sortMyArray02(char myArray[10][30], int num)
{
int i, j = 0;
char tmpBuf[30];

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

}

//打印  排序
//封装成函数
void main()
{
int i = 0, j = 0;
int num = 4;
char myBuf[30];
char tmpBuf[30];
char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbb", "1111111111111"};

//myArray: 编译器只会关心:有10行 ,每行30列。。。。。干什么?myArray+1  多维数组名的本质,myArray+1会往后面跳30个单元
{
int len1 = sizeof(myArray);
int len2 = sizeof(myArray[0]);
int size = len1/len2;
printf("len1:%d , len2:%d  size:%d \n", len1, len2, size);

}

//打印
printf("排序之前\n");

printMyArray02(myArray, num);

sortMyArray02(myArray, num);

//打印
printf("排序之后\n");
printMyArray02(myArray, num);

printf("hello...\n");
system("pause");
return ;
}


第一种模型改变指针的指向,第二种模型直接交换内存块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: