3.6 C提高3day
1.二级指针做参数输出特性
形参想要改变实参 最好通过指针
点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getMem(char* p)
{
p = (char*)malloc(sizeof(char) * 100);
if (p == NULL)
{
return -1;
}
strcpy(p, "abdakg");
printf("p = %s\n", p);
return 0;
}
int main()
{
char* p = NULL;
int ret = 0;
ret = getMem(p);
return 0;
}
--正确代码\ ret = getMem(&p) ; 形参多加一个*
2.二级指针做输入:第一种内存模型
点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//void print_array(char *p[], int n)
void print_array(const char** p, int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
printf("%s, ", p[i]);
}
printf("\n");
}
void sort_array(const char** p, int n)
{
int i, j;
const char* tmp;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (strcmp(p[i], p[j]) > 0)
{
tmp = p[i];
p[i] = p[j];
p[j] = tmp;
}
}
}
}
int main(void)
{
//指针数组,指针的数组,它是一个数组,每一个元素都是指针char *
const char* p[] = { "111111111", "000000000", "bbbbbbbbb", "aaaaaaaaa" };
//char **q = { "111111111", "000000000", "bbbbbbbbb", "aaaaaaaaa" }; //err
//p[0] = "111111111"
int n = sizeof(p) / sizeof(p[0]);
printf("排序前:\n");
print_array(p, n);
sort_array(p, n);
printf("\n排序后:\n");
print_array(p, n);
printf("\n");
system("pause");
return 0;
}
3._二级指针做输入:第二种内存模型(二维指针)
点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print_array(char a[][30], int n)
{
//printf("a: %d, a+1:%d\n", a, a + 1);
int i = 0;
for (i = 0; i < n; i++)
{
printf("%s, ", a[i]); //首行地址,和首行首元素地址的值是一样
}
printf("\n");
}
int main(void)
{
char a[][30] = { "2222222222", "11111111111", "bbbbbbbbbbb", "aaaaaaaaaaaa" };
//a代表首行地址,首行地址和首行首元素地址有区别,但是他们的值是一样
//区别:步长不一样
printf("a:%d, a+1: %d\n", a, a + 1);
char b[50];
printf("b:%d, b+1: %d\n", b, b + 1);
return 0;
}
4.二级指针做输入:第三种内存模型
本文来自博客园,作者:逆向狗,转载请注明原文链接:https://www.cnblogs.com/Agtw/p/17184293.html