cba数据可以直接赋值吗(C语言指向不同数据类型的指针可以直接赋值吗)

本文目录
- C语言指向不同数据类型的指针可以直接赋值吗
- 在C语言中能否直接给指针指向的数据赋值为什么
- C语言中结构体中的数组,不能直接赋值吗
- 结构体变量如何赋值可以直接赋值吗
- c++类中 对于私有数据成员,在main函数中是否可以直接为其赋值,如果直接赋值或输出会出现什么情况
- C#中的decimal数据类型为什么不能直接赋值
- 直接赋值 和重新赋值有什么区别
- 联合体变量之间是否可以可以直接赋值,结构体变量之间是否也可以直接赋值
- c语言中char型数据能直接运算吗
C语言指向不同数据类型的指针可以直接赋值吗
这种是不会出错的
比如这个代码
#include 《stdio.h》int main(){ int a=2,*q=&a; float b=2.1,*p=&b; *q=*p; printf("%d %f\n", *q, *p); return 0;}
会输出2 2.100000
这个等效于 a=b, float赋值给int,会自动做强制转换,也就是向下取整。
当如果是 q=p 那就不行了。 不同类型指针不可以直接赋值。
如果一定要赋值 可以q=(int *)p;做显式的强制转换。 但是由于int和float的存储结果不同,得到的值也是错的。
在C语言中能否直接给指针指向的数据赋值为什么
可以,但int *p;*p=7;这样不行。
因为“能直接给指针指向的数据”赋值,而这里的p还没有指向,所以不能赋值,这种指针有个名字叫“悬浮指针”,是不能给它赋值的。
这样才可以:
int a,*p=&a;*p=7;
实际上就是使a等于了7。
扩展资料:
注意事项
也可以使用赋值运算符为指针变量赋值,但要保证两个指针变量的类型相同。
假设有如下变量定义:
int i,j,*p,*q;p=&i;q=&j;
这两句将变量i和j的地址分别赋值给指针变量p和q;
执行了q=p后,执行该条语句,指针变量p和q都指向了同一个变量i,因此指针变量p和q中存放的都是变量i的地址&i。变量i此时并没有初始化,只为其分配了内存单元。
注意理解:q=p;和*q=*p
前者为指针变量q赋值,即将指针变量p中存放的某个变量的地址赋值给q。显然,赋值后,q和p就指向了同一个变量。
后者将p指向变量的赋值给q指向的变量。
例子:
p=&i;
q=&j;
i=2;
j=3;
C语言中结构体中的数组,不能直接赋值吗
数组不能整体赋值,需要逐个元素赋值,但是如果这个数组是一个结构体的成员,可以通过结构体之间的直接赋值间接达到数组整体赋值的效果,即:t1.mark=t2.mark;//非法,数组不能直接整体赋值。t1=t2;//合法,在此之后,t2.mark数组将被整体复制到t1.mark数组。
结构体变量如何赋值可以直接赋值吗
结构体变量是可以直接赋值的; 定义结构体类型,然后用这个类型定义出来的变量就是结构体变量; C语言在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,这里因为同样结构体变量,属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的。
c++类中 对于私有数据成员,在main函数中是否可以直接为其赋值,如果直接赋值或输出会出现什么情况
不行,除非把main函数定义成类的友元如果直接赋值或输出,编译无法通过,告诉你不能访问类的私有成员
C#中的decimal数据类型为什么不能直接赋值
不是不能直接赋值,而是写法的问题,直接写 3.14 编译器会认为这是一个双精度数而非decimal,而从double到decimal是不可以隐式转换的,所以会报错,后面加上了M以后就表示这是告诉编译器这就是个decimal,所以可以直接赋值。至于为什么双精度型(double)到实数(decimal)不可隐式转换,是因为后者精度更高,但是其数值表示范围反倒不如前者大。
直接赋值 和重新赋值有什么区别
说明:赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是简单地复制类中的每个成员。 下面看例子。 c++中初始化和赋值操作差别是很大的。 对于基本数据类型差别不大: 比如:12 int a = 12; // initialization, copy 0X000C to aa = 12; // assignment, copy 0X000C to a但是对用户自定义的数据类型比如String 初始化和赋值就差别很大:12345678910111213141516 class String { public: String( c***t char *init ); // intentionally not explicit! ~String(); String( c***t String &that ); String &operator =( c***t String &that ); String &operator =( c***t char *str ); void swap( String &that ); friend c***t String // concatenate operator +( c***t String &, c***t String & ); friend bool operator 《( c***t String &, c***t String & ); //... private: String( c***t char *, c***t char * ); // computational char *s_; };初始化的构造过程比较简单:先分配一个足够大的空间然后填充上数据:12345 String::String( c***t char *init ) { if( !init ) init = ""; s_ = new char; strcpy( s_, init ); }析构过程更简单:String::~String() { delete s_; }但是如果赋值操作就复杂多了:1234567891011 String &String::operator =( c***t char *str ) { if( !str ) str = ""; char *tmp = strcpy( new char, str ); // 多了中间变量 delete s_; // 多了删除s_; s_ = tmp; // 多一个赋值操作!现在是指向字符的指针,如果是个大对象,效率的差别可想而知. return *this; }对于这种情况,建议在条件允许的情况下最好在初始化的时候就赋值,而尽量避免用=号赋值了,比如用成员初始化列表来初始化成员数据,不在构造函数里用赋值操作给成员数据.
联合体变量之间是否可以可以直接赋值,结构体变量之间是否也可以直接赋值
可以直接赋值。要注意的是这个赋值相当于memcpy比如struct mystruct a, b; a = b;就相当于memcpy( &a, &b, sizeof(a) );所以当结构体中有指针时,而且不同对象指向不同数据时就有问题了(根据前面说的,这个指针也会被拷贝成同一个指针)
c语言中char型数据能直接运算吗
c语言中char型数据能直接运算吗?
在某些低版本编译器中可以,在高版本的一些则不行 (貌似是这样,不确定,我在vc++6就可以,但vs2013是不行的) 在高版本中位操作(操作使有效位溢出时)会提醒堆栈溢出的错误。
C语言中int型数据和float型数据做加减运算结果为什么类型?
float型 c编译系统会自动向高精度类型进行转化。
c语言中什么算是实型数据?
- 实型数据分两类:单精度和双精度float和double在内存中占用的字节:float占用4个字节,double占用8个字节。
-
整型的变量是没有小数点的,实型是有小数点的整型你可以理解为整数,5:5就是整型常量。不是实型包含整型,实型和整型是不同的类型,它们在内存中的存储方式是不。
C语言中把unsigned char 型数据赋值给int 型数据会不会出问题
这个问题,因为不知道你具体的使用环境,没法作出进一步的判断,只能将 unsigned char型的变量赋给一个int型的变量会发生什么事情告诉你。 unsigned char a = ’A’; int b = -1666666; b = a; 由于unsigned char类型的变量只有一个字节,而int类型有4个字节,当将一个unsigned char类型的变量赋给一个int型的变量后,会使int型变量的高三个字节全部清零。在上述实例中就是b的高三个字节全部变为0。也就是说b永远为正整数了。细节就是这样了,至于会不会产生副作用,视你的使用环境而定了。
C语言中的char型数据是什么意思?
- char是指高级编程语言数据中的字符类型,是C/C++整型数据中比较古怪的一个,char在标准中是unsigned,编译器可以实现为带符号的,也可以实现为不带符号的
-
char 有符号字符型 长度(字节)为1 -128~127 unsigned char 无符号字符型 长度(字节)为1 0~255
C语言中十进制数和十六进制数能直接运算吗?
- 输出十六进制还是十进制取决于你。在计算机内部数字都是2进制存储的。int V=0x20-10;结果是0x16或22,只有在显示时才存在十六进制还是十进制的问题。
-
你想对地址为0的一个字节赋值。unsigned char*p=0;地址为0*p=0;赋值实际运行时在有内存保护的操作系统中,可能系统不允许你随便更改不属于该程序的内存空间。
可以。一个整型变量可以是十进制,也可以是十六进制,只是表示方法不同罢了。至于运算结果,你想输出十进制就输出十进制,想输出十六进制就输出十六进制,标准输出函数printf()有这个功能。
C语言中什么叫实型数据?
C语言中的实型数据是指带有小数的数。 比如:1.23,87.225等 根据精度的高低,实型数据又分为单精度实型、双精度实型和长双精度实型。
C语言中怎样输出大型数据?
你是说超过int(?-32768~32767)范围的数字? 大型的数据一般都是用字符串保存的。 可以定义一个字符串数组,然后数字的每一位数字就是数组的一个元素,
C语言中longlong型数据怎么输出
在不同的编译器中有不同的输出 long long a; printf("%I64d",a); 或者 long long a; printf("%lld",a); 在正常情况下使用第一种,在某些做题网站中用第二种,可询问老师或管理员 在比赛中会有明确的提示
C语言中16进制数据怎么运算
无论你输入、输出的还是编写程序中给出的,无论是十六进制数据还是十进制数据,它们在计算机运行时都会被转换成二进制进行运算。

更多文章:
老鹰明星球员(名记:卡明斯基一年底薪签约老鹰,他的实力水平如何)
2026年5月19日 10:00
2017火箭对骑士(与去年骑士相比,今年火箭打勇士有更多的优势)
2026年5月19日 09:00



























