C语言当中结构句后面一个星号,是什么意思?

www.zhiqu.org     时间: 2024-06-01
1、定义一个指向结构变量的指针。
2、C语言中的结构体
格式:
struct 结构体标识名
   {
    类型名1 结构成员表1;
    类型名2 结构成员表2;
    „„
    类型名n 结构成员表n;
   };
  注意:struct是关键字,是结构体类型的标志。“结构体标识名”和“结构体成员名”都是用户定义的标识符,“结构体标识名”是可选项,在说明中可以不出现。每个“结构成员表”中都可以含有多个同类型的成员名,它们之间用逗号隔开。结构体中的成员名可以和程序中的其他变量名相同,不同结构体中的成员也可以同名。要记住:结构体说明要以分号结尾。
3、结构指针
结构指针是指向结构的指针。它由一个加在结构变量名前的"*" 操作符来定 义, 例如用前面已说明的结构定义一个结构指针如下:
struct string{
char name[8];
char sex[2];
int age;
char addr[40];
}*student;
也可省略结构指针名只作结构说明, 然后再用下面的语句定义结构指针。
struct string *student;

在C语言中使用*号有两种情况。
1、做乘法运算符使用。
在计算机中一般不使用数学的乘号×,而是用更容易打出的*替代。
如果*出现在运算中,且左右都有表达式,那么*就是当做乘号来使用的。
比如:

#include <stdio.h>
int main(){
    printf("%d
", 3*4);
    return 0;
}

这个程序就是简单的计算3*4的输出,会输出12。

2、定义指针时做标识符。
在C语言中有指针的概念,在定义某个类型的指针时,会采用
TYPE *name;的形式。 具体说明在第三部分中一并叙述。

3、做取值运算符。
对某个指针变量做*操作,表示取该指针指向地址中的值。
在这种情况下*位于所要取值的指针变量前。如*p。
比如:

#include <stdio.h>
int main()
{
   int a=3;
   int *p = &a;//&为取地址 在这里的*是指针定义标识
    
    printf("a = %d
", a);//输出a的值,为3
    printf("*p = %d
", *p);//输出*p的值,这里的*是取值运算符。输出结果同样为3
    return 0;
}


1 费劲是为了结构化考虑,毕竟NVIC_Type里面有很多参数,不止一个不是?
如果都裸露出来,万一有一天要面对多个对象怎么办?
这样还有一个好处就是,只要知道结构体的名字就可以顺藤摸瓜找参数

2 (NVIC_Type *)是指定NVIC的类型,也就是NVIC在用的时候会被当作这个类型处理。
NVIC的值是NVIC_BASE = SCS_BASE + 0x0100

我们知道结构体变量的实质是一个指向其内存空间头部的指针,与结构体中的首元素内存地址相等,那ISER既然是首元素,他的地址自然是与NVIC一样啦,也就是:
SCS_BASE + 0x0100 = 0xe000e100

IExample *
声明一个指向IExample类型的指针

1、(NVIC_Type *) 应该是类型强制转换的意思,
把从NVIC_BASE这个地址开始的连续数据,转换成NVIC_Type的类型
2、使用 #define ISER (0xE000E100) 的原因:应该是 ISER 这个数据的值是不能改变的。
也就是C++中const的性质。
如果使用 ISER=0x85c0; 万一后面又有其他代码修改了 ISER 的值,编译器不会报错。
所以,使用#define 相当于降低了系统出错的风险。

C语言当中结构句后面一个星号,是什么意思?~

星号在这里是指针的意思。指向结构NVIC_Type的指针。这里因为NVIC_BASE本身和CS_BASE一样都是常量,所以这个指针是固定位置的常量指针。
这也能解释为什么后面有NVIC->ISER=0x85c0;这样的用法。

第二个问题:
理论上,你可以按你想的方式去做:
#define ISER (0xE000E100) 然后来一句:ISER=0x85c0;
C并不限制你做这样的事情。但是这里有一个结构。可能这个结构会在后续被用到,所以这样的设计也许是基于这样的考虑。
我不太清楚这段代码是作什么用,没什么上下文,估计是嵌入式平台上的代码,所以我不确定这个回答是不是完全正确。

char* 声明下面的变量是指针,指向char型量。
void* 声明下面的变量是指针,指向void 型。
int* 声明下面的变量是指针,指向int型量。

malloc的用法
#define ARRAY_SIZE 100
char *s;
int *a;
s = (char *) malloc( ARRAY_SIZE * sizeof(char));
if (!s) {printf("no enough memory for s
");exit(0);};
a = (int *) malloc( ARRAY_SIZE * sizeof(int));
if (!a) {printf("no enough memory for a
");exit(0);};
for (i=0;i<ARRAY_SIZE;i++) a[i] = i * 3;
printf("please input a line strings
");
gets(s);
printf("the line is: %s
",s);


#赫邵霄# C语言 %*f 什么意思? -
(18485835065): 要看是在scanf里还是printf里,意思不同的: 在scanf里,这个星号表示scanf读取并抛弃此种类型的输入,比如: char a[64]; scanf("%*f%s", a); puts(a); 你输入:123.456qqq,只有qqq被读到a里,123.456被读取并丢弃了. 在printf里,如果...

#赫邵霄# C语言中%*6d中*是什么意思?? -
(18485835065): 如果在 % 后有一个 " * " 号,这是一个附加说明符,表示读取时跳过它指定的列数. 例如: %*6d%4d%2d%2d 表示读入6位整数但不赋值给任何变量.然后再读入4位整数、2位整数,2位整数,最后结束读取. 求采纳

#赫邵霄# c语言中符号*都有什么作用? -
(18485835065): printf("%*d\n",i,i); 加上*号后,输出列表中的第一个i表示输出列宽,使要输出的参数右对齐,此时i=1表示输出列宽为1,于是在第一列显示1,假设是如下语句:printf("%*d\n",3,i); 由于输出列宽是3,于将在第三列输出i的值.另外,printf("%-*d\n",i,i);表示左对齐

#赫邵霄# C语言!这里这个星号作用是什么?怎么后面还有空格? const U8 GUI - UNI - PTR * pData -
(18485835065): 声明的是一个指针,星号和标识符之间可以有空格.

#赫邵霄# c语言中"*s"这是什么意思 -
(18485835065): 你好,*s表示s是一个指针.*s表示s指针指向的相应变量的值. 比如. int *s; int a = 10; s = &a; *s这个时候指向的是int类型的变量a,*s等于a的值,也就是10.

#赫邵霄# C语言中,星号和等号连在一起是什么意思 -
(18485835065): 相当于result =result*x;

#赫邵霄# C语言中#if 0 和#end if 是什么意思? -
(18485835065): 是预处理指令,这些指令是预编译时执行的,为预编译如果xxx为真,编译A,假编译B,0为假不编译.1. 在编程中选择结构中最实用的就是if语句,打开编程软件C-FREE,Ctrl+N新建一个cpp.2. 输入图中的程序,该程序的作用是对输入的三个数字按大小排序.3. 注意图中if语句的格式:if(条件){条件成立的结果}.按F5执行程序.4. 输入你想要输入的三个数字,每按一个按一次回车键.5. 检查得出的结果是否符合从小到大排列,然后再重新仔细看下程序中if语句的意义,程序中X是起交换作用.

#赫邵霄# C语言中int*是什么意思? -
(18485835065): int*是指向int的指针 char*是指向char的指针*a是对指针a解引用 char* p;是声明一个char*类型的指针*p = &c;把c的地址赋给p指向存储的内存 int b = 3; int* a = &b; // 取b的地址并赋给指针a*a = 4; // 修改a所指向地址的内存内容为4,因为a指向b,所以这句执行之后b = 4

#赫邵霄# C语言 结构体 -
(18485835065): s=(SLIST*)malloc(sizeof(SLIST)) sizeof(SLIST)) 表示SLIST结构类型占用的字节数 malloc()函数是用来向操作系统申请内存的函数,申请成功则返回所申请内存的首地址,是void类型,必须经强制转换成其他指针类型才能使用 假设SLIST结构类型占用n个字节,则 malloc(sizeof(SLIST))则表示申请n个字,它返回一个void类型的指针, s=(SLIST*)malloc(sizeof(SLIST))就是将申请的内存返回的地址转化为SLIST*类型的指针,然后赋值给指针变量s

#赫邵霄# C++编程,VS类名后面加星号*是什么意思? -
(18485835065): 类名后面加*,表示该类型为对应类的指针类型. 指针类型为C/C++语言的特色概念,其值为对象的地址. 类名加*,有两种作用情况: 1 用于定义时,或用于函数参数,返回值时,表示对应变量值为类指针类型; 2 用于变量前,以(CLASS_NAME *)var_name,形式出现时,表示将变量或常量var_name强制转换为类指针类型.