欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于C语言中:初始化指向NULL的指针作为参数报错问题---原因是指向NULL 的指针没有指向具体的地址空间

程序员文章站 2022-06-15 13:45:58
...

需要在被调用的函数中malloc分配空间 才能对指针指向的地址保存的值进行修改。
对malloc函数不记得还需翻阅 c prime plus
int *pt;
pt = (int *)malloc(sizeof(int)*capacity);
声明一个指向int类型的指针
指针指向的地址首部的位置以及指向的内存大小

#include<stdio.h>
#include<stdlib.h>
char ** readBinaryWatch(int num, int* returnSize); 
int func(int x);
int main(){
	int *result = NULL;
	char **nums = readBinaryWatch(2, result);
	system("pause");
	return 0;
}

//参数 数组 得到的指向结果的指针
//二级指针 二维数组 根据返回值决定的
char ** readBinaryWatch(int num, int* returnSize){
	//使用结果
	char **res = NULL;
	//结果指针
	returnSize = (int*)malloc(sizeof(int)* 1);
	*returnSize = 0;
	//0到12对应二进制1的个数
	int table[12] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3 };
	//时间 分钟
	for (int minute = 0; minute < 60; ++minute) {
		//设计需要统计分钟数对应的1二进制的个数  可以取余的方式来获取二进制中1的个数
		int i = func(minute);

		for (int hour = 0; hour < 12; ++hour) {
			if (i + table[hour] == num) {
				//给二级指针所指向的空间分配空间
				res = res ? (char**)realloc(res, (1 + (*returnSize)) * sizeof(char*)) : (char**)malloc(sizeof(char*));
				//数组 字符串 相当于 *p 字符串中的每个字母*p++ ????
				res[*returnSize] = (char*)malloc(6 * sizeof(char));
				printf(res[(*returnSize)++], "%d:%02d", hour, minute);
			}
		}
	}
	return res;
}

int func(int x)
{
	int cnt = 0;
	while (x)
	{
		cnt++;
		x = x&(x - 1);
	}
	return cnt;
}