C语言之指针专题四:指针做函数参数
来源:互联网 发布:lewin'gene知乎 编辑:程序博客网 时间:2024/05/17 06:26
编号
指针函数参数
内存分配方式(级别+堆栈)
主调函数
实参
被调函数
形参
备注
01
1级指针
(做输入)
堆
分配
使用
一般应用禁用
栈
分配
使用
常用
Int showbuf(char *p);
int showArray(int *array, int iNum)
02
1级指针
(做输出)
栈
使用
结果传出
常用
int geLen(char *pFileName, int *pfileLen);
03
2级指针
(做输入)
堆
分配
使用
一般应用禁用
栈
分配
使用
常用
int main(int arc ,char *arg[]);指针数组
int shouMatrix(int [3][4], int iLine);二维字符串数组
04
2级指针
(做输出)
堆
使用
分配
常用,但不建议用,转化成02
int getData(char **data, int *dataLen);
Int getData_Free(void *data);
Int getData_Free(void **data); //避免野指针
05
3级指针
(做输出)
堆
使用
分配
不常用
int getFileAllLine(char ***content, int *pLine);
int getFileAllLine_Free(char ***content, int *pLine);
指针做函数参数,问题的实质不是指针,而是看内存块,内存块是1维、2维。
如果基础类int变量,不需要用指针;
若内存块是1维、2维。
1、二级指针三种内存模型的建立:堆区、栈区、常量区
2、二级指三种内存模型字符串排序举例:
1、二级指针第一种内存模型:常量区
int sortArray07(char**pstr, int num)
{
int i = 0, j = 0;
int ret = 0;
char*tmp = NULL; //交换的是指针变量,因此定义一个临时指针变量
if (pstr == NULL)
{
ret = -1;
printf("sortArray07() param err:%d\n", ret);
return ret;
}
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (strcmp(pstr[i], pstr[j])>0)
{
tmp = pstr[i];
pstr[i] = pstr[j];
pstr[j] = tmp;
}
}
}
return ret;
}
void main07()
{
char*myArray[] = { "bbbb", "111111", "aaaaa", "ccccc" };//字符串在常量区,四个指针变量存放了该地址
printf("排序前\n");
printArray07(myArray, 4);
sortArray07(myArray, 4);
printf("排序后\n");
printArray07(myArray, 4);
system("pause");
}
2、二级指针第二种内存模型:栈区
int sortArray08(char (*pstr)[10], int num)
{
int i = 0, j = 0;
char tmp[1024] = { 0 }; //交换的是只存空间的内容,而不是指针变量,因此定义一个临时缓冲区充当交换空间
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (strcmp(pstr[i], pstr[j])>0)
{
strcpy(tmp, pstr[i]);
strcpy(pstr[i], pstr[j]);
strcpy(pstr[j], tmp);
}
}
}
return 0;
}
void main08()
{
char myArray[][10] = { "bbbb", "111111", "aaaaa", "ccccc" };//字符串在栈区,从常量区拷贝到栈区
printf("二级指针第二种内存模型排序前\n");
printArray08(myArray, 4);
sortArray08(myArray, 4);
printf("二级指针第二种内存模型排序后\n");
printArray08(myArray, 4);
system("pause");
}
3、二级指针第三种内存模型:堆区
//交换的是指针变量所指向空间的内容、类似栈区空间内容的交换
int sortArray091(char**pstr, int num)
{
int i = 0, j = 0;
char tmp[1024] = { 0 };
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (strcmp(pstr[i], pstr[j])>0)
{
strcpy(tmp ,pstr[i]);
strcpy(pstr[i], pstr[j]);
strcpy(pstr[j], tmp);
}
}
}
return 0;
}
//交换的是指针变量,和常量区交换是一样的
int sortArray092(char**pstr, int num)
{
int i = 0, j = 0;
char*tmp = NULL; //交换的是指针变量
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (strcmp(pstr[i], pstr[j])>0)
{
tmp = pstr[i];
pstr[i] = pstr[j];
pstr[j] = tmp;
}
}
}
return 0;
}
char**getMem( int num)
{
char**myArray = (char**)malloc(100 * sizeof(char*));
for (int i = 0; i < num; i++)
{
myArray[i] = (char*)malloc(12 * sizeof(char));
}
return myArray;
}
void main()
{
char**myArray = NULL;
myArray = getMem(4);
if (myArray == NULL)
{
printf("malloc err\n");
return;
}
strcpy(myArray[0], "bbbb");
strcpy(myArray[1], "111111");
strcpy(myArray[2], "aaaaa");
strcpy(myArray[3], "ccccc");
printf("二级指针第三种内存模型排序前\n");
printArray09(myArray, 4);
//交换指针变量
//sortArray091(myArray, 4);
//交换指针变量所指向的空间
sortArray092(myArray, 4);
printf("二级指针第三种内存模型排序后\n");
printArray09(myArray, 4);
system("pause");
}
- C语言之指针专题四:指针做函数参数
- C语言之指针专题四:指针做函数参数
- C语言之指针专题二:指针做函数参数是指针存在的最大意义
- C语言之指针专题二:指针做函数参数是指针存在的最大意义
- C语言之数组专题:数组指针、指针数组、数组做函数参数退化、数组名、数组类型
- C语言之数组专题:数组指针、指针数组、数组做函数参数退化、数组名、数组类型
- C语言指针笔记之 一级指针的应用(指针做函数参数)
- C语言:指针做函数参数
- C语言中函数之指针参数
- C语言之指针专题三:理解指针要和内存四区模型和函数调用模型相结合
- C语言之指针专题三:理解指针要和内存四区模型和函数调用模型相结合
- c指针做函数参数
- C语言函数指针做函数参数案例
- 黑马程序员-------C语言----指针做函数参数
- 指针做函数参数——高效C语言
- c语言用指针做函数参数和用变量做函数参数的不同点
- 【C语言提高37】结构体元素做函数参数与结构指针做函数参数
- c语言指针做参数的优点
- Web前端开发推荐阅读书籍-精华
- 面试题总结(一)
- Php7的这些新特性你掌握了吗?
- windows搭建python开发环境并操作MySQL
- Flex 布局教程:实例篇
- C语言之指针专题四:指针做函数参数
- pandas库的数据类型运算
- 判断子树问题
- 10-7&&10-8NOIP模拟赛总结
- 关于列表的扁平化
- 习题3第五题:分析习题2第四题所述的患者监护系统。试用实体联系图描绘本系统的数据对象,画出本系统的顶层IPO图。
- java产生随机数且猜数字游戏(源码)
- python和C语言混编的几种方式
- spring boot 整合 Jersey