1.指针特性
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//输出特性
void fun01(char* p)
{
strcpy(p, "asdafj");
}
int main00(void)
{
char buf[100] = {0};
fun01(buf);
printf("%s", buf);
getchar();
return 0;
}
//输入特性
void fun02(char** p,int* len)
{
if (NULL == p||NULL==len)
{
return;
}
char* tmp = (char*)malloc(sizeof(char*)* 100);
if (tmp == NULL)
{
return;
}
strcpy(tmp, "asfasfasdasd");
//间接赋值
*p = tmp;
*len = strlen(tmp);
}
int main01()
{
int len=0;
char* p = NULL;
fun02(&p, &len);
if (p != NULL)
{
printf("p=%s,len=%d\n", p, len);
}
getchar();
return 0;
}
2.指针做参数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//分配内存
void allocate_mem(char*** p,int n)
{
char** temp= (char**)malloc(sizeof(char*)*n);
if (NULL==temp)
{
return ;
}
int i = 0;
for ( i=0; i < n; i++)
{
temp[i] =(char*) malloc(sizeof(char)* 30);
sprintf(temp[i], "%2d_hello worid", i + 1);
}
*p=temp;
}
//打印数组
void arr_print(char** arr,int len)
{
for (int i = 0; i < len; i++)
{
printf("%s\n", arr[i]);
}
}
//释放内存
void free_mem(char*** buf,int n)
{
if (buf == NULL)
{
return;
}
char** temp = *buf;
for (int i = 0; i < n; i++)
{
free(temp[i]);
temp[i] = NULL;
}
free(temp);
}
int main02()
{
int n=10;
char** p= NULL;
allocate_mem(&p,n);
arr_print(p, n);
free_mem(&p, n);
system("pause");
return EXIT_SUCCESS;
}
3.数组和指针
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main03()
{
int arr[3][3] =
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
int temp=0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < i; j++)
{
temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d", arr[i][j]);
}
printf("\n");
}
system("pause");
return EXIT_SUCCESS;
}
4.三级指针
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//申请空间
int getArray(char** myarray1, char*** newp, int num)
{
if (NULL == myarray1)
{
return -1;
}
char** temp = (char**)malloc(sizeof(char*)*num);
if (NULL == temp)
{
return -1;
}
for (int i = 0; i < 3; i++)
{
temp[i] = (char*)malloc(sizeof(char)* 64);
temp[i] = myarray1[i];
printf("字符串地址:%p\n", temp[i]);
}
*newp = temp;
return 0;
}
//释放空间
void freeArray(char*** newpfree, int num)
{
if (NULL == newpfree)
{
return;
}
char** temp = *newpfree;
for (int i = 0; i < num; i++)
{
free(temp[i]);
temp[i] = NULL;
}
free(temp);
}
int main()
{
char* arr[] = { "itcast", "itheima", "helloworid" };
int num = 3;
char* newp[] = { 0 };
int ret = 1;
ret=getArray(arr, &newp, num);
if (ret == 0)
{
printf("成功");
}
freeArray(&newp, num);
system("pause");
return EXIT_SUCCESS;
}