现在位置: 首页 > 自动控制 > 工业·编程 > 文章
2018-11-13 16:05 工业·编程 ⁄ 共 1414字 暂无评论
int main() {    char a[5]={'A','B','C','D'};    char (*p3)[5] = &a;    char (*p4)[5] = a;    return 0; } 上面对p3 和p4 的使用,哪个正确呢?p3+1 的值会是什么?p4+1 的值又会是什么?毫无疑问,p3 和p4 都是数组指针,指向的是整个数组。 &a 是整个数组的首地址,a是数组首元素的首地址,其值相同但意义不同。在C 语言里,赋值符号“=”号两边的数据类型必须是相同的,...
阅读全文
初学者总是分不出指针数组与数组指针的区别。其实很好理解: 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32 位系统下任何类型的指针永远是占4 个字节。它是“储存指针的数组”的简称。 数组指针:首先它是一个指针,它指向一个数组。在32 位系统下任何类型的指针永远是占4 个字节,至于它指向的数组占多少字节,不知道,具体要看数组大小。它是“指向数组...
阅读全文
优先级:()>[]>* 首先我们要说的一个知识点是 int (*p)[3]   因为()优先级高,首先说明p是一个指针,指向一个int型的一维数组, 数组有3个元素,每个元素是一个int型整数 简单来说,就是int (*p)[3]是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组而已  int *p[3]  [ ] 优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,指针数组本身就是个数组,只不过这个数组...
阅读全文
2018-11-08 15:15 工业·编程 ⁄ 共 215字 暂无评论
int array[3][4] = {...}; 区分array+1 和&array+1。 array+1是从array算起,按int[4]类型的大小,向前移动一步,此时array+1的值指在array[1]处。 而&array+1是从array算起,按int[3][4]类型的大小,向前移动一步(此步很大,整整扩过了二维数组), 此时&array+1的值指在二维数组array的界外。因为&array明确指示编译器,要将加一的步长按二维数组计。
阅读全文
2018-11-07 15:08 工业·编程 ⁄ 共 182字 暂无评论
数组是不可以整体赋值的,但常常需要用到数组的赋值,以避免写循环。这能否做到? C语言中能赋值的只有变量,只要让数组变量化,变量赋值时岂不捎带将数组完成了赋值?! 能含有数组的类型只有结构体。于是可以: struct name {     int array[10]; }a, b; 于是,在a = b;时就完成了数组的赋值。 注意:切不可“自赋值”,那会造成“内存重叠”,其结果是未定义的。  
阅读全文
2018-11-06 15:00 工业·编程 ⁄ 共 227字 暂无评论
比如,构造一个共用体: union KeyCode {         short int keynum;         char byte[2]; }kc; 当用kc接受接盘输入的字符时,计算机将把它转换成一个双字节的整数编码,其中Byte[1]存放的是高字节的值,是键盘的扩展码; Byte[0]存放的是低字节的值,即ASCII码;而keynum则是它的整体值。 用类似的方法可以解析多个字节的内存变量的高低字节的值...
阅读全文
下面给出一个解决方案: 首先定义一个枚举类型,用以标识共用体中哪个成员是可用的: enum widget_tag {count_w, value+w, name_w}; 然后再用结构体将共用体和枚举包装起来: struct WIDGET {     enum widget_tag tag;     union     {         long count;         double value;    &...
阅读全文
2018-11-03 14:45 工业·编程 ⁄ 共 1307字 暂无评论
设计一个函数: void find1(char array[], char search, char *pa) 要求: 这个函数参数中的数组array是以\0值为结束的字符串,要求在字符串array中查找与参数search给出的字符相同的字符。如果找到,通过第三个参数(pa)返回array字符串中首先碰到的字符的地址。如果没有找到,则为pa为NULL。 依题意,实现代码如下。 void find1(char [] array, char search, char *pa) {     for (int i = 0; *(array + i) !=...
阅读全文
2018-11-02 14:41 工业·编程 ⁄ 共 386字 暂无评论
1.在栈区建立数组,指向常量区数据的字符串 char *cPioint[3]={"111111","2222222","3333333"}; 这种用法可以通过二级指针进行传参 void PrintfStr(char **cpoint); 当想访问“111111”时的时候 采用以下两种方法 1)printf("%s",cpoint[0]); 2)printf("%s",*(cpoint+0); 2.手动在堆区分配空间 char **chPoint=(char**)malloc(counts*sizeof(char*)); for(i=0;i<c...
阅读全文
2018-11-01 14:16 工业·编程 ⁄ 共 2477字 暂无评论
一、概念 在如下的A指向B、B指向C的指向关系中: 首先 C是"一段内容",比如你用malloc或者new分配了一块内存,然后塞进去"一段内容",那就是C了。C的起始地址是0x00000008。 B是一个指针变量,其中存放着C的地址,但是B也要占空间的啊,所以B也有地址,B的起始地址是0x00000004,但是B内存中存放的是C的地址,所以B里面的内容就是0x00000008。 那么到此为止都比较好理解: B= 0x00000008;  //B的内容 *B ...
阅读全文