char* hh[] char (*hh) []

本文探讨了C语言中指针与数组的关系,通过具体示例解释了char*aa[]和char(*bb)[]的区别,并澄清了常见误解。
今天在看apue的时候突然对一段代码有了兴趣,我把他贴出来。
#include <stdio.h>
#include <fcnl.h>


int main(int argc,char *argv[])
{
    if(open(argv[1],O_RDONLY)<0)
    {
        printf("open error for %s,argv[1]");
    }
    return 0;


一直在数组和指针上面有点疑惑,这个char *argv[]到底是什么?自己分析了半天无果,于是腆着脸问群里兄弟。一句“
 你还不系统的去学习下。。会被超车的哦。。”戳中了我的泪点,于是我就泪流满面了,也就引发了我对    char* aa[] 和char (*bb) []的疑问。
char *aa[5],*的优先级低于[],aa就是指向含有5个char元素数组的指针,hh的本质是指针。char (*bb) [5],bb先和*结合。bb是一个数组,数组中有5个元素,每个元素都是一个指针,指针指向char数据。
现在我来定义一个数组,char cc[5];
aa=cc;这句话对吗?cc也是一个指针啊?不对?
这句话是不对的,cc是一个指针,指向cc[5]数组的第一个元素。而aa是
指向含有5个char元素数组的指针。数据类型不一样,正确的写法应该是 aa=&cc;
对cc去地址就是获取数组的地址。
#include <uthash.h> #include <stdio.h> #include <uthash.h> #include <stdlib.h> #include <string.h> typedef struct hashMap{ char *numChar; UT_hash_handle hh; }hashMap; hashMap *hashMap0 = NULL; hashMap *findNum(char *numChar) { hashMap *s; HASH_FIND_STR(hashMap0, numChar, s); } void addNum(char *numChar) { hashMap *s; HASH_FIND_STR(hashMap0, numChar, s); if (s == NULL) { s = (hashMap*)malloc(sizeof(hashMap)); strcpy_s(s->numChar, sizeof(s->numChar), numChar); HASH_ADD_STR(hashMap0, numChar, s); } } int cmpStr(const void *str1, const void *str2){ char *str11 = (char*)str1; char *str22 = (char*)str2; return strcmp(str11, str22); } static char **GetAllFault(char **arrayA, size_t arrayASize, char **arrayB, size_t arrayBSize, size_t *returnSize) { *returnSize = 0; if (arrayASize == 0 && arrayBSize == 0) { return NULL; } for (int i = 0; i < arrayASize; i++) { addNum(arrayA[i]); } for (int j = 0; j < arrayBSize; j++) { addNum(arrayB[j]); } int mapLens = HASH_COUNT(hashMap0); qsort(hashMap0, mapLens, sizeof(hashMap), cmpStr); char standard[] = "FFFFFFFF"; char **res = (char**)malloc(sizeof(standard) * (mapLens + 1)); int i = 0; for (hashMap *s = hashMap0; s != NULL; s = s->hh.next) { res[i] = s->numChar; i++; } res[mapLens] = NULL; return res; } 上面的代码是我为这道题写的解,你帮我看看我错在哪里的,线上oj说我程序异常退出 假设某系统中有两块单板,这两块单板上产生的告警ID(以十六进制字符串表示)分别存储在列表 arrayA 和列表 arrayB 中。 请统计并输出系统中的所有告警ID(即 arrayA 和 arrayB 的并集): 如果告警ID存在重复,先需去重。 然后以告警ID所表示值的升序排序输出 输入 第一个参数为告警列表 arrayA,0 <= arrayA.length <= 1000 第一个参数为告警列表 arrayB,0 <= arrayB.length <= 1000 告警ID为无符号整数,以十六进制字符串表示,由数字字符、大写字母A~F组成,固定为 8 个字符。 输出 按升序排序的告警ID 样例1 复制输入: ["00001001", "00ABCD00"] ["FFFFFAAB", "FFFFFAAB", "00ABCD00"] 复制输出: ["00001001", "00ABCD00", "FFFFFAAB"] 解释: 系统中共有三个告警ID: 00ABCD00,去重后保留一个; FFFFFAAB,去重后保留一个; 00001001,只有一个。 按所表示值的大小升序排列,输出这三个告警ID为 ["00001001", "00ABCD00", "FFFFFAAB"] 。 样例2 复制输入: [] ["FFFFFAAB"] 复制输出: ["FFFFFAAB"] 解释:
08-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值