请教一个C语言的问题,请问#define KEY0 (GPIOD->IDR&GPIO_Pin_0)里面的->是代表啥意思,

作者&投稿:称朗 (若有异议请与网页底部的电邮联系)
~

就是一个宏定义,即后面的KEY0将全部用 后面的这一串代替:“(GPIOD->IDR&GPIO_Pin_0)

所以,下面的语句

if KEY0
   printf("Stop");

经过预编译后就变成了:

if (GPIOD->IDR&GPIO_Pin_0)
   printf("Stop");

所以使用宏定义后如果编译出错,你又看不出来的话,需要你仔细你的宏定义是否正确定义且被正确地使用。

其中的"->"是表示访问结构指针对应对象下的IDR成员,可以改写为“(*GPIOD).IDR"。

也就是说,如果GPIOD不是一个指针变量,或者不是指向拥有IDR成员的结构对象则编译就会出错;而如果对某个指针进行强制转换后编译成功了并不一定保证执行不会出错。比如:

void *ptr=.../*某个结构对象的地址,但该结构没有IDR成员*/;
(struct stru_name_with_IDR*)ptr->IDR=...../*对ptr强制转换以便对其中的IDR成员进行操作*/;

上述两句编译时不会报错,因为使用强制转换,编译器认为你是了解你的目的的,但运行中可能出错,比如ptr指向的对象尺寸不够就会越界,其他的错误取决于IDR的类型等。

不知道这样说清楚了没?




请教一道C语言问题。。求大神指导下
u8 S1_CH :1;u8 S2_FLESH_RTN :1;u8 S3_HEATER :1;u8 S4_VALVE :1;u8 S5_POR :1;u8 S6_DEFMODE :1;u8 SYS_SET :2;}Bits;这个结构体比较高级,u8 S1_CH :1;冒号1,表示,字段S1_CH占据U8的一个位(Bit)从前往后算,u8 S2_FLESH_RTN :1;占据第二个,等等,u8...

请教:c语言的问题请教各位高手,是一个欧拉公式的转换问题,函数中两个返...
F-E+V=2。试一下用拓朴学方法证明关于多面体的面、棱、顶点数的欧拉公式。证明 :(1)把多面体(图中①)看成表面是薄橡皮的中空立体。(2)去掉多面体的一个面,就可以完全拉开铺在平面上而得到一个平面中的直线形,像图中②的样子。假设F′,E′和V′分别表示这个平面图形的(简单)多边形、...

请教一个C语言的简单问题
对于第一问,等你数据输入完以后,想显示某位同学的信息的话,先顺序比对一下数组中有没有该同学的名字 for(n=0;n<=4;n++){ if(students[n].name=="你输入的名字")break;}\/\/执行完以后n就是该同学的编号。然后输出相关信息即可。但是这里还存在一个多个同学重名的问题,要注意一下。对于第2...

请教一个有关C语言编程的问题
include <stdio.h> int power(int x){ int s=1;while(--x>=0)s*=10;return s;} void change(int num,int x){ int res=0;int i=0;int num2=num;while(num2>0){ res+=((num2%x)*power(i++));num2\/=x;} printf("%d\\n",res);} void main(){ int a=20;change(a,7...

请教一个C语言的计算题目!!!
int level(int n)\/*递归求阶层*\/ { if(n<=1)return 1;else return(n*level(n-1));} int main(){ printf("5!=%d,10!=%d",level(5),level(10));return 0;} ...5!的意思就是求5的阶层 n!=n*(n-1)*(n-2)*...*2*1 你不会连这个都不懂吧 ...

请教一个c语言题目
是整除取余,只能进行整型运算,而12.8不是整数,A错。C正确,选C 0x12是十六进制数,转换为对应的十进制数是18

我是一个c语言初学者,有问题请教前辈。
第一道题:include "stdio.h"main(){float eps,s=0,i=4,k=1;int f=1;printf("\\ninput eps:");scanf("%f",&eps);while(f*k>eps){s+=k;f*=-1;k=f*(1.0\/i);i+=3;} printf("s=%f",s);getch();} 第二道题:include"stdio.h"main(){int f1=1,f2=1,f3,n,i=3;...

c语言编程题,做了一天了,有两题实在不会,老师只教了一点点,让我们自学...
六题,看函数名就知道了。写完才注意到你需要用C语言,但我写的是C++。我也懒得改了,你自己改一下吧,只要把输入输出语句换成C语言的格式就可以了。

c语言初学者请教一个问题!
{ if (a[i]>a[i+1] && a[i]>a[i+2] && a[i]>a[i+3] && a[i]>a[i+4] && a[i]>a[i+5] && a[i]%2!=0)\/\/上一行多了一个括号 b[cnt++]=a[i]; \/\/多了一个分号 } for (i=0; i<cnt-1; i++) \/\/排序自己写吧,我没有看出问题来,熟悉一种排序...

请教大家一个有关 & 符号的c语言问题
按位与运算。35的二进制是100011,c&c:100011 100011 --- 100011 所以结果还是35,这个35已经不同与原来的C的值了 该程序只是因为35&35结果还是35才迷惑人。换个数试试你就明白了。并不是你说的只执行前一个C,而后面的&c就不予处理。

城区15311475797: 请教C语言的一个小问题 -
仝蔡来曲: 用语言真不好说,画内存图就比较清楚了.还是说说吧,不知道楼主能不能理解.先说第一个,数组是由十个float类型的元素组成,def就是指向这个数组的指针的指针.再说第二个,数组是由十个指向float类型的指针的元素组成,def是指向这个数组的指针.希望能帮到你,谢谢,满意的话就采纳吧

城区15311475797: C语言#define输出问题 -
仝蔡来曲: 程序printf (FORMAT,FORMAT);实现过程如下:1. 在编译时,将FORMAT用"%s! C is cool!\n"替换,变成:printf ("%s! C is cool!\n","%s! C is cool!\n"); 2. 执行时,由于第一个格式控制字符%s的存在,第一个%s会被后面的字符串“%s! C is cool!\n”替代.实际打印输出的字符串应为:“%s! C is cool!\n! C is cool!\n”

城区15311475797: 请教一个C语言的问题,请问#define KEY0 (GPIOD - >IDR&GPIO - Pin - 0)里面的 - >是代表啥意思, -
仝蔡来曲: 就是一个宏定义,即后面的KEY0将全部用 后面的这一串代替:“(GPIOD->IDR&GPIO_Pin_0) ” 所以,下面的语句 if KEY0printf("Stop");经过预编译后就变成了: if (GPIOD->IDR&GPIO_Pin_0)printf("Stop");所以使用宏定义后如果编...

城区15311475797: c语言一个小问题,关于#define 的
仝蔡来曲: #include <stdio.h> #define S(x) 4*(x)*x+1 main() {int k=5,j=2; printf("%d\n",S(k+j));}

城区15311475797: 请教C语言的一个题目? -
仝蔡来曲: 问题一解答: 首先,我得说明的是:这应该是个来自dos时代的C程序. 在dos时代,128到255的ascii码并不会以汉字模式显示,而是有独立的字符集表示.在windows时代,128到255的ascii码会以两个一组表示为一个汉字的模式显示,就是你...

城区15311475797: 请教一个C语言问题: -
仝蔡来曲: #include <stdio.h>#include <stdlib.h> int main() { char i,t; long int j,k; printf("Enter ticket number:"); i=getchar(); j=0; /*初始化余数*/ while (i != '\n') { k=i-'0'; /*char转化成int*/ if((t=getchar())=='\n') break; j=(10*j+k)%7; /*用上一次计算的余数当成十...

城区15311475797: 请教一道c语言题目 -
仝蔡来曲: 形参h已指向字符串中第一个字母,形参p指向字符串的中最后一个字母.你这程序没有按套路走啊! for(j=i;a[i]!=0;i++) { if( (a[i]>='a'&&a[i]='A'&&a[i] a[j++]=a[i]; } //以上把所有的字母都已经写到a数组中去了! while(*p) //p是指向最后一个字母的,所以,这里又加了一个最后这个字母! { a[j]=*p; *p++; j++; }

城区15311475797: 问一个对于我很难的C语言题,输入N个数,输出这N个数的平均值.还有一个C语言问题, -
仝蔡来曲: N就是N个数,可以任意取,以下两题以10为例#include <stdio.h>#define N 10 main() { int a[N],i; float ave=0; for(i=0;i<N;i++) { scanf("%d",&a[i]); ave=ave+a[i]; } printf("%0.2f",ave/10); } 用单循环输入数字,并且输入一个,累加一个,最后第...

城区15311475797: 请教一个c语言的问题,求大神回答 -
仝蔡来曲: 你的程序等同于#include <stdio.h> main() { char w[][10] = {"ABCD","EFGH","IJKL","MNOP"},k; printf("%s\n",&w[1][1]); printf("%s\n",&w[2][2]); getch(); } 意思是输出第一个数组第一个数据开始 输出第二个数组第二个开始 注意这里的第一个是从0开始数的 至于后面是输出数据格式问题,只能用%S 用其他的没什么意义

城区15311475797: 请教一个C语言的问题
仝蔡来曲: main() { int s=0,i=1; while (i<100) { if (i%3==0) s=s+i; i++; } printf("%d",s); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网