C 语言 指针的输入与输出特性
输入特性
输入特性定义
输入特性:主调函数分配内存,被调函数使用内存
代码示例2—打印字符串
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
// 主调函数分配内存,被调函数使用内存
//字符串打印函数
void printString(const char* str)
{
printf("打印内容:%s\n", str);
}
//主调函数
void test()
{
//堆上分配内存 (字符串)
char *s = malloc(sizeof(char) * 100);
memset(s, 0, 100);
strcpy(s, "Hello word1");
printString(s);
//栈上分配内存(字符串)
char * p = "Hello word2";
printString(p);
}
int main()
{
test();
system("pause");
return EXIT_SUCCESS;
}
代码示例2—打印字符串数组
//字符数组打印函数
void printStringArray(char** arr,int len)
{
int i = 0;
for (i = 0; i < len; i++)
{
printf("打印内容:%s\n", arr[i]); //arr[i]是char *类型的
}
}
//堆空间分配内存函数
void allocateStringArray(char ***p,int len)
{
char **temp = (char**)malloc(sizeof(char*) * len);
*p = temp;
}
//主调函数1——堆上分配内存
test01()
{
//堆上分配内存(字符串数组)
char **p = NULL;
allocateStringArray(&p,3);
for (int i = 0; i < 3; i++)
{
p[i] = (char*)malloc(sizeof(char) * 10);
}
//为数组指针赋值
p[0] = "aaaa";
p[1] = "bbbb";
p[2] = "cccc";
printStringArray(p, len);
free(p);//释放堆内存
}
//主调函数2——栈上分配内存
test02()
{
//栈上分配内存
char * strs[] = { "aaaa","bbbb","cccc","dddd" };
int len = sizeof(strs) / sizeof(char *);
printStringArray(strs, len);
}
int main()
{
test01();
test02();
system("pause");
return EXIT_SUCCESS;
}
输出特性
输出特性定义
输出特性:被调函数分配内存,主调函数使用内存
代码示例—打印字符串
void allocateSpace(char **temp)
{
char * p = malloc(100);
memset(p, 0, 100);
strcpy(p, "hello word");
//指针的间接赋值
*temp = p;
}
//释放内存函数
void free_allocate(void * p)
{
if (p != NULL)
{
free(p);
p = NULL;
}
}
// 主调函数
void test()
{
char *p = NULL;
allocateSpace(&p);
printf("p=%s\n", p);
free_allocate(p);
}
int main()
{
test();
system("pause");
return EXIT_SUCCESS;
}