tag 标签: 指针

相关帖子
相关博文
  • 热度 2
    2016-4-24 16:07
    1315 次阅读|
    0 个评论
    int a ;//10指明了数组的长度;即数组的下标上界是9;a 是无效的 int *c,*p; c=a;//实际被赋值的是一个指针的拷贝,c所指向的是数组的第一个元素 sizeof(a);//此时a代表是整个数组返回数组的长度,在32位系统,值为4*10 a ;//下标引用 *(a+2);//间接访问//除优先级外,下标引用和间接访问完全相同 *p=a+2;//此时a代表首元素地址 char *p=”acbdef”;//sizeof(p)的值4 //p是个指针本身占4字节(32系统),但是p的值,即在这4字节//内存里存放了一块内存的首地址. *(p+4)=d; p =d;//这两种方式等价 //a+1值下个数组的首地址,并不是第二个元素a 的地址 char p =d;//两种等价 int *p ;//指针型数组优先级() ;//数组型指针,元素是整数;p指向包含10个整型数//据的数组;在这里,数组并没有名字 int i=10,j=10; int a,b; a=i++;//a的值是10 b=++j;//b的值是11 //优先级中,自增++运算符高于赋值=运算符,注意以上情况; //函数调用是值传递假如main函数变量n=10要调用一个函数e(n), //e得到的是n的值,对n的值进行了一次复制。变量n不受e 函数//影响。int a ;//10指明了数组的长度;即数组的下标上界是9;a 是无效的 int *c,*p; c=a;//实际被赋值的是一个指针的拷贝,c所指向的是数组的第一个元素 sizeof(a);//此时a代表是整个数组返回数组的长度,在32位系统,值为4*10 a ;//下标引用 *(a+2);//间接访问//除优先级外,下标引用和间接访问完全相同 *p=a+2;//此时a代表首元素地址 char *p=”acbdef”;//sizeof(p)的值4 //p是个指针本身占4字节(32系统),但是p的值,即在这4字节//内存里存放了一块内存的首地址. *(p+4)=d; p =d;//这两种方式等价 //a+1值下个数组的首地址,并不是第二个元素a 的地址 char p =d;//两种等价 int *p ;//指针型数组优先级() ;//数组型指针,元素是整数;p指向包含10个整型数//据的数组;在这里,数组并没有名字 int i=10,j=10; int a,b; a=i++;//a的值是10 b=++j;//b的值是11 //优先级中,自增++运算符高于赋值=运算符,注意以上情况; //函数调用是值传递假如main函数变量n=10要调用一个函数e(n), //e得到的是n的值,对n的值进行了一次复制。变量n不受e 函数//影响。
  • 热度 22
    2015-11-20 09:55
    1506 次阅读|
    0 个评论
    使用 万用表测电阻 是工程师在平时工作中,最经常接触到的基础操作之一。但是,看似简单的电阻测试,却也经常会出现一些突发状况。今天小编总结了三种在万用表测电阻过程中最经常出现的问题,在这里进行答复,希望能够对各位工程师和刚刚开始从事电子设计工作的技术人员们提供相应帮助。 问题1:为什么万用表测电阻过程中会出现负值? 在万用表测电阻的过程中,出现负值的原因有两种,测试的电阻带电或工程师所使用的数字万用表没有校正,都是有可能导致这种情况的。如果发现电阻带电,只需要切断电源或等元件自主完成放电过程再进行测试即可。而指针式万用表的校正时间是有期限的,一旦过了有效校正期,万用表产生误差就会变大,对此工程师可以自己校正,当然最好还是拿出去给专业人士来校正。 问题2:如何减小指针万用表测电阻的误差? 指针是万用表与数字式万用表一样,都是目前比较常用到的电阻检测设备。而对于使用指针是万用表测电阻的同学们来说,如何将误差控制在最小,就是一个大问题了。在这里可以为大家介绍一种方法:选好档位,让指针靠近中值就会减小误差。如果检测人员还不知道待测电阻的大约值,那么可以选一个档位,欧姆调零以后再测量。如果偏转角度太大,说明电阻小,换小档,欧姆调零后测量待测电阻,如果偏转角度太小,说明电阻大,需要换大档,欧姆调零以后测量待测电阻。切记换挡后重新欧姆调零,档位合适的原则是指针靠近中值,因为中值附近刻度比较均匀,读起来误差较小。 问题3:为什么万用表测量小欧姆的电阻读数不准确? 在使用万用表测电阻的过程中,出现读数不准确的情况,往往是由这4个原因导致的。第一种情况是小阻值电阻的引线电阻相比本体电阻不能忽略。这样,表笔接触引线的位置会直接带来测量偏差。第二个原因是表笔与引线的接触电阻与本体电阻相比不能忽略。表笔与引线的接触电阻在测量电路中与被测电阻是串联的。第三种可能导致读数不准确的情况是万用表低阻值档的测量电流较大,容易引起内置电池的电压变化(内阻压降和放电容量压降)。除此之外,万用表的量程有限。一般指针式万用表的最低阻值刻度为0.5欧,数字表为0.1欧。而数字表还要考虑表笔引线电阻的问题(数字表的电阻档没有调零功能),测量低值电阻精度并不比指针表高。 AO-Electronics 傲壹电子 官网: www.aoelectronics.com 中文网:www.aoelectronics.cn
  • 热度 21
    2014-7-6 22:43
    1553 次阅读|
    3 个评论
    在翻以前的博客的时候,发现有篇博客里边写的有问题。 http://forum.eet-cn.com/BLOG_ARTICLE_18773.HTM   首先以前在写关于这道面试题的想法时,将里边的变量p = "",误解为*p=""; 由于对于数组的赋值,一般都是在{}中进行的(字符数组可以使用=“”)。对于给字符串指针赋值,使用=""。 这里根据习惯想当然的也把这里的p 即字符数组,当将“”赋值给p 写作,*p,那么当将“”赋值给*p的时候,编译器将“”的地址写入到p,而*p将指向“”的第一个字符; 调用return p时,返回的是""的地址,由于“”是在rodata区的,内容不会被修改。所以可以再次引用这里的内容。 再次注意到这里,是想表明数组和指针之间的虽然使用方式很像,但是实际差异还是很大。虽然,指针跟数组在使用的时候,方式有些像,但是在程序中的实现差别就大了很多。
  • 热度 15
    2014-3-14 12:11
    1065 次阅读|
    0 个评论
    结构题变量操作结构体里面的元素用电操作符; 结构体指针操作结构体里面的元素用指向操作符。
  • 热度 22
    2013-10-24 23:00
    1375 次阅读|
    0 个评论
    指针作为参数传递 值传递, 指针传递? 这几天在学习C过程中,在使用指针作为函数参数传递的时候出现了问题,根本不知道从何得解:源代码如下:     createNode(BinNode *tree,char *p)     {         tree = (BinNode *) malloc(sizeof(BinNode));         tree-data = *p;     } 该代码段的意图是通过一个函数创建一个二叉树的节点,然而在,调用该函数后,试图访问该节点结构体的成员时候,却发生了内存访问错误,到底问题出在哪儿呢? 一直不明白指针作为函数参数传值的机制,翻开林锐的《高质量C/C++编程指南》,找到了答案。           原来问题出在C编译器原理上:编译器总是要为函数的每个参数制作临时副本,指针参数tree的副本是 _tree,编译器使 _tree = tree。如果函数体内的程序修改了_tree的内容,就导致参数tree的内容作相应的修改。这就是指针可以用作输出参数的原因。 即上面的函数代码经过编译后成为:     createNode(BinNode *tree,char *p)     {         BinNode *_tree;         _tree = tree;         _tree = (BinNode *) malloc(sizeof(BinNode));         _tree-data = *p;     } 如果没有     _tree = (BinNode *) malloc(sizeof(BinNode)); 这个语句,在函数体内修改了_tree的内容,将会导致参数tree的内容作相应的修改,因为它们指向相同的内存地址。而     _tree = (BinNode *) malloc(sizeof(BinNode)); 这个句,系统重新分配内存给_tree指针,_tree指针指向了系统分配的新地址,函数体内修改的只是_tree的内容,对原tree所指的地址的内容没有任何影响。因此,函数的参数是一个指针时,不要在函数体内部改变指针所指的地址,那样毫无作用,需要修改的只能是指针所指向的内容。即应当把指针当作常量。 如果非要使用函数指针来申请内存空间,那么需要使用指向指针的指针     createNode(BinNode **tree,char *p)     {         *tree = (BinNode *) malloc(sizeof(BinNode));     } 上面的是林锐的说法,目前来说不知道怎么去理解,不过可以有另外的方案,通过函数返回值传递动态内存:     BinNode *createNode()     {         BinNode *tree;         tree = (BinNode *) malloc(sizeof(BinNode));         return tree;     } 这个倒还说得过去,因为函数返回的是一个地址的值,该地址就是申请的内存块首地址。但是,这个容易和另外的一个忠告相混绕     这里区分一下静态内存,栈内存和动态分配的内存(堆内存)的区别: (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。 因此,试图返回一个栈上分配的内存将会引发未知错误     char *GetString(void)     {         char p[] = "hello world";         return p; // 编译器将提出警告     } p是在栈上分配的内存,函数结束后将会自动释放,p指向的内存区域内容不是"hello world",而是未知的内容。 如果是返回静态存储的内存呢:     char *GetString(void)     {         char *p = "hello world";         return p;     } 这里“hello world”是常量字符串,位于静态存储区,它在程序生命期内恒定不变。无论什么时候调用GetString,它返回的始终是同一个“只读”的内存块。  
相关资源