(C 语言)问题的根源:将多个数组连成一个数组的快捷办法;问题的根源:将多个数组连成一个数组的快捷办法;我
(C 语言)问题的根源:将多个数组连成一个数组的快捷办法;
问题的根源:将多个数组连成一个数组的快捷办法;
我现在用的死办法, 一个一个地赋值;
但是还想到一种就是: 用指针数组,然后问题就出现了,如下:
static char disp_on01[5] = { 0xDF, 0x55, 0xAA, 0x52,0x08,};
static char disp_on02[5] = { 0xDF, 0x55, 0xAA, 0x52,0x08,};
static char disp_on03[5] = { 0xDF, 0x55, 0xAA, 0x52,0x08,};
static char disp_on04[5] = { 0xDF, 0x55, 0xAA, 0x52,0x08,};
static char disp_on05[5] = { 0xDF, 0x55, 0xAA, 0x52,0x08,};
static unsigned char* param[] = {
disp_on01,disp_on02,disp_on03,disp_on04,disp_on05,NULL,
};
然后我是怎么想得到param,disp_on01等长度都得不到正确的值:sizeof(param)不行,strlen(param)编译错误, sizeof(param[0])也不能得到disp_on01....等等 所以我就困惑了, 我现在用的是一个一个数组的赋值一个数组, 但是数组个数太多,都写了好几百行了。 求教啊
#pragma warning(disable:4305 4309)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static char disp_on01[5] = { 0xDF, 0x55, 0xAA, 0x51,0x08,};
static char disp_on02[5] = { 0xDF, 0x55, 0xAA, 0x52,0x08,};
static char disp_on03[5] = { 0xDF, 0x55, 0xAA, 0x53,0x08,};
static char disp_on04[5] = { 0xDF, 0x55, 0xAA, 0x54,0x08,};
static unsigned char* param;
void test(int n) {
int i,g;
param=(unsigned char*)malloc(n*5);
if (NULL==param) exit(1);
g=(unsigned int)disp_on02-(unsigned int)disp_on01;
for (i=0;i<n;i++) {
memcpy(param+i*5,disp_on01+i*g,5);
}
for (i=0;i<n*5;i++) printf("%02X ",param[i]);
printf("\n");
free(param);
}
int main() {
test(3);
test(4);
return 0;
}
//DF 55 AA 51 08 DF 55 AA 52 08 DF 55 AA 53 08
//DF 55 AA 51 08 DF 55 AA 52 08 DF 55 AA 53 08 DF 55 AA 54 08
//
[解决办法]扩展一个动态数组,,,然后往后加,,
[解决办法]你就是属于不会的
变量的声明顺序 和 变量的分配顺序 无关
你其他通过disp_on01+偏移访问其他数组
做法不可靠 不要误导新手好嘛
2条链接 你看一下
http://codepad.org/kR5xoN68
http://ideone.com/qZE2hq
[解决办法]不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?
[解决办法]任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
摆在眼前的事实就是
一个运行结果是
http://ideone.com/qZE2hq
[解决办法]
我只认VC6摆在我眼前的事实。(我驾船出海的话只带一个指南针)
你如果能用VC6举出反例,我才会服你。
不恰当的比喻
所有指南针对船的导航效果都是一致的
而 不同的编译器[指南针]对那段残次品代码的解析[对船只的导航] 却是不同的
狭小的眼界
自以为是的无知
你服不服 我无所谓
我打你的脸 只是不让你误导新人而已
“所有指南针对船的导航效果都是一致的”
可惜事实并非如此。
1+1=2在现实世界中发生过哪怕一次吗?
[解决办法]“所有指南针对船的导航效果都是一致的”
可惜事实并非如此。
呵呵 不止对编程不在行
基础的物理常识都不具备吗
弱爆了
[解决办法]static char disp_on01[5] = { 0xDF, 0x55, 0xAA, 0x52,0x08,};
static char disp_on02[5] = { 0xDF, 0x55, 0xAA, 0x52,0x08,};
static char disp_on03[5] = { 0xDF, 0x55, 0xAA, 0x52,0x08,};
static char disp_on04[5] = { 0xDF, 0x55, 0xAA, 0x52,0x08,};
static char disp_on05[5] = { 0xDF, 0x55, 0xAA, 0x52,0x08,};
static unsigned char* param[] = {
disp_on01,disp_on02,disp_on03,disp_on04,disp_on05,NULL,
};
static int Sizes[]={
sizeof(disp_on01)/sizeof(disp_on01[0]),
sizeof(disp_on02)/sizeof(disp_on02[0]),
sizeof(disp_on03)/sizeof(disp_on03[0]),
sizeof(disp_on04)/sizeof(disp_on04[0]),
sizeof(disp_on05)/sizeof(disp_on05[0]),
-1};
int getTotalSIze(){
int size=0;
while(Sizes[i]>0)size+= Sizes[i];
return size;
}
int getSize(int n){
return Sizes[n];
}
马马虎虎用的话,可以采取这样的方式补救。
赵老师的方法,本来是可以用的,不过C,C++不是汇编语言。
数据未必会安排在一起,也未必就按照定义的顺序排列。
可能,某一次可以成功,甚至很多次都成功了。
突然有一次,就不行了。
早期的编译器,也许会按照数据排列的顺序,组织数据。
这样比较紧凑,占用内存比较小。
而且也没有多线程之说。
编译器,只能顺序扫描数据,比较自然的情况,就是数据也顺序安排。
中间可能插入一些间隔,用于对齐。
现在的编译器,受到的限制比较少,加上很多东西,不再标准之内,编译器可以随便安排。