c语言强制转换结构体类型
㈠ 关于c语言中的强制类型转换,请真正懂的高手解答下
不是。
指针类型决定对对象的操作方式。也就是你如何看待、如何处理缓冲。
打个浅显的比方,同样是橱窗里的一块肉,你既可以把它看作很多的肉片,也可以把它看作少量的肉块。因为它在橱窗里,因此你实际上切不到它!
㈡ C语言结构体类型
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
在C语言中,定义一个结构的一般形式为:
struct结构名
{
//成员表列
};
成员表由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符成员名;”。成员名的命名应符合标识符的书写规定。例如:
structstu
{
intnum;
charname[20];
charsex;
floatscore;
};
在这个结构定义中,结构名为stu,该结构由4个成员组成。第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。应注意在括号后的分号是必不可少的。
然后,当结构定义完成后,即创建了一种数据类型,可以像int、float等内置类型一样使用,以上面定义的stu结构体来和int类型对比着看。
inta;//定义一个int类型的变量a
stua;//定义一个stu类型的变量a
int*p;//定义一个int类型的指针p
stu*p;//定义一个stu类型的指针p
inta[10];//定义一个int类型的数组a,它有10个元素,每个元素是int类型
stua[10];//定义一个stu类型的数组a,它有10个元素,每个元素是stu类型。
㈢ C语言结构体类型问题
这个跟以往的调用交换
函数
后
数值
没变是一个道理
虽然函数Mp1中oneday的year改变了
但是实际上
主函数
中oneday这个
结构体
的存储地址里的内容一直没变
㈣ C语言 结构体类型..
static不是类型,是类型修饰符。具体是什么含义,要看这段代码出现的位置。
㈤ c语言中,在结构体中如何将void *转存为具体需要的数据类型
1 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并
详述void及void指针类型的使用方法与技巧。
2.void的含义
void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。
void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:
void a;
这行语句编译时会出错,提示“illegal use of type 'void'”。不过,即使void a的编译不会出错,它也没有任何实际意义。
void真正发挥的作用在于:
(1) 对函数返回的限定;
(2) 对函数参数的限定。
我们将在第三节对以上二点进行具体说明。
众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型
转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。
例如:
float *p1;
int *p2;
p1 = p2;
其中p1 = p2语句会编译出错,提示“'=' : cannot convert from 'int *' to 'float *'”,必须改为:
p1 = (float *)p2;
而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换:
void *p1;
int *p2;
p1 = p2;
但这并不意味着,void *也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包
容“无类型”。道理很简单,我们可以说“男人和女人都是人”,但不能说“人是男人”或者“人是女人”。下面的语句编译出错:
void *p1;
int *p2;
p2 = p1;
提示“'=' : cannot convert from 'void *' to 'int *'”。
3.void的使用
下面给出void关键字的使用规则:
规则一 如果函数没有返回值,那么应声明为void类型
在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是许多程序员却误以为其为void类型。例如:
add ( int a, int b )
{
return a + b;
}
int main(int argc, char* argv[])
{
printf ( "2 + 3 = %d", add ( 2, 3) );
}
程序运行的结果为输出:
2 + 3 = 5
这说明不加返回值说明的函数的确为int函数。
补充:void 中文翻译为"无类型"。常用在程序编写中对定义函数的参数类型、返回值、函数中指针类型进行声明。
void的字面意思是"无类型",void *则为"无类型指针",void *可以指向任何类型的数据。
在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是许多程序员却误以为其为void类型。
㈥ 在C语言中,基本类型都可以相互强制转换吗基本类型和结构体能强制转换吗强制转化的条件是什么
强制类型转换顾名思义就是用户强制的而不是语言自身的自动的进行转换
因此,你可以对任何类型进行强制类型转换,但后果需要你自己承担
也就是说,你必须明确的知道这样转换以后会带来什么后果
比如你把float类型强制转化为int类型,必然导致精度的丢失
如果你可以接受,没问题
如果你把结构体类型强制转换为int(或者反过来),程序只会给你一个警告
但你使用的时候,程序很可能会出错
所以一般基本类型直接的转换只会导致精度的丢失
但结构体和基本类型的转换可能导致程序的错误
所以实际使用中应该尽量避免这样的转换
具体的你可以参照一下网络
㈦ C语言结构体类型函数
void f(A c) /* 注意:c结构变量名 但这个c也是个复制品,与原实参只是一样的内容,却不是同一个!! */ 所以结果还是a={1,2}; 答案为B
㈧ c语言中不是说 结构体也能强制转换类型的吗,为什么写的这段代码会报错呢
为什么要把结构体强制类型转换啊?结构体可以直接赋值的。
#include "stdafx.h"
struct A
{
char a;
int b;
};
struct B
{
int a;
char b;
};
int main(int argc, char* argv[])
{
A x = {'A' ,10};
B y = {11, 'B'};
B z;
z.a = x.a;
printf("%d\n",z.a);
return 0;
}
输出A的值65
㈨ c语言的结构体类型
#include<stdio.h>
intmain()
{
intn,i;
structstudent
{
ints;
charn[20];
floatc;
}s1,s2;
scanf("%d%s%f",&s1.s,s1.n,&s1.c);
scanf("%d%s%f",&s2.s,s2.n,&s2.c);
if(s1.c>s2.c)
printf("%d,%s,%f ",s1.s,s1.n,s1.c);
else
printf("%d,%s,%f ",s2.s,s2.n,s2.c);
return0;
}
㈩ C语言中结构体变量能不能强制类型转换
你写的程序不太完整,不能看是否正确。例如:“PRO cell;”,“sell[i].mc”的由来。
从你的最后一句话可以大概猜出一些原因:因为用“strcmp”就行,而“strcmp”是专门处理字符串的,所以“sell[i].mc”的实际内容是字符串。可是你用“long”做强制类型字符串,这当然不行。
以上只是推断,不一定对。