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) ; 形参多加一个*

image

2.二级指针做输入:第一种内存模型
image

点击查看代码
#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._二级指针做输入:第二种内存模型(二维指针)
image

点击查看代码
#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.二级指针做输入:第三种内存模型
image

posted @ 2023-03-06 16:11  逆向狗  阅读(28)  评论(0)    收藏  举报