关于数组相关乱七八糟

char b[] = "1234";
int main()
{
    char a[] = "1234";
    std::cout << "Hello World!\n";
}

a是指针,指向局部变量“1234”,存在栈中
b指向全局变量“1234”。

   int a[3][3] = { 1,2,3,4,5,6,7,8,9 };
    int*  p= &a[0];

错误写法。

int a[3][3] = { 1,2,3,4,5,6,7,8,9 };
    int*  p=(int*) &a[0];

p指向了a的第一个元素。

int a[3][3] = { 1,2,3,4,5,6,7,8,9 };
    int*  p=(int*) (&a[0]+1);
    p++;

p先指向了4,后指向了5。

Int a[10]={1,2,3,4,5,6,7,8,9,10};
Int *p=&a[3];
Int b=p[3];
Printf(%d”,b);
Return 0;

输出7。

char h[] = "hello";
    std::cout << sizeof(h)<<sizeof(*h);

6 1

Char **a[5][6];
cout<<sizeof(a);

64位系统下面输出240;表示字符二重指针数组。

数组等价表示

数组int a[3][4]中的a[2][1]用其他形式表示

int a1=*(*(a+2)+1);
int a2=*(a[2]+1);
int* p=&a[0][0];
int a3=p[9];
### 重写主函数以验证输入数据的有效性 以下代码展示了如何在C语言中重写哈夫曼树程序的主函数,确保输入数据的有效性。通过增加输入验证逻辑,防止无效或乱七八糟的数据影响程序运行。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> // 定义二叉树节点结构 typedef struct TreeNode { int freq; // 权值 char ch; // 字符(若为内部节点,则用 '#' 表示) struct TreeNode *left, *right; // 左右子树指针 } TreeNode; // 创建新节点 TreeNode* createNode(int freq, char ch) { TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode)); newNode->freq = freq; newNode->ch = ch; newNode->left = newNode->right = NULL; return newNode; } // 按权值从小到大排序节点数组 void sortNodes(TreeNode** nodes, int size) { for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - i - 1; j++) { if (nodes[j]->freq > nodes[j + 1]->freq) { TreeNode* temp = nodes[j]; nodes[j] = nodes[j + 1]; nodes[j + 1] = temp; } } } } // 构造哈夫曼树 TreeNode* buildHuffmanTree(int freq[], int size) { TreeNode* left, *right, *top; TreeNode** nodes = (TreeNode**)malloc(size * sizeof(TreeNode*)); // 初始化叶子节点 for (int i = 0; i < size; i++) { nodes[i] = createNode(freq[i], 'a' + i); // 假设字符从 'a' 开始 } while (size != 1) { sortNodes(nodes, size); // 取出权值最小的两个节点 left = nodes[0]; right = nodes[1]; // 创建新的父节点 top = createNode(left->freq + right->freq, '#'); top->left = left; top->right = right; // 替换前两个节点为父节点 nodes[0] = top; for (int i = 1; i < size - 1; i++) { nodes[i] = nodes[i + 1]; } size--; } TreeNode* root = nodes[0]; free(nodes); return root; } // 中序遍历哈夫曼树 void inorderTraversal(TreeNode* root) { if (root == NULL) return; inorderTraversal(root->left); if (root->ch != '#') printf("%c(%d) ", root->ch, root->freq); inorderTraversal(root->right); } // 主函数:增加输入验证逻辑 int main() { int n; printf("请输入词频个数(不超过10):"); if (scanf("%d", &n) != 1 || n <= 0 || n > 10) { // 验证输入是否合法 printf("输入错误!词频个数必须是110之间的整数。\n"); return 1; } int freq[n]; printf("请输入%d个词频(正整数):", n); for (int i = 0; i < n; i++) { if (scanf("%d", &freq[i]) != 1 || freq[i] <= 0) { // 验证每个词频是否为正整数 printf("输入错误!词频必须是正整数。\n"); return 1; } } // 构造哈夫曼树 TreeNode* root = buildHuffmanTree(freq, n); // 输出中序遍历结果 printf("哈夫曼树的中序遍历序列:\n"); inorderTraversal(root); printf("\n"); return 0; } ``` #### 代码说明 - **输入验证**:在主函数中增加了对词频个数和词频值的验证逻辑,确保输入数据有效[^2]。 - **错误处理**:如果用户输入无效数据,程序会输出错误信息并终止运行。 - **构造哈夫曼树**:`buildHuffmanTree` 函数通过不断合并权值最小的两个节点来构建哈夫曼树,确保权值较小者作为左子树,相同权值按先后顺序分左右[^3]。 - **中序遍历**:`inorderTraversal` 函数递归地输出哈夫曼树的中序序列。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清欢_小铭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值