关于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;
}