为什么不同类型的指针不能相互赋值
发布网友
发布时间:2023-03-25 02:40
我来回答
共3个回答
热心网友
时间:2023-10-18 06:04
可以赋值,只不过运行时可能出错,比如
#include <stdio.h>
struct test{
int a;
int b;
char c;
};
void main(void)
{
int a;
struct test *q;
a = 65535;
q = &a;
printf("%d\n", *q);
}
上边的程序,在编译时会出现指类不兼容的警告,但是程序可以运行,结果是65535,这是printf自身的原因。你要做的就是避免因为指类不同而引起的段错误(非法内存访问)。
热心网友
时间:2023-10-18 06:05
指针类型不同,在为其分配内存空间时大小也不同,这时如果要进行计算得出来的结果是毫无意义的。
热心网友
时间:2023-10-18 06:05
因为指针的类型不同,代表指针的运算方式也不一样,所以运算后所指向的地址不一样。
为什么不同类型的指针不能相互赋值
上边的程序,在编译时会出现指类不兼容的警告,但是程序可以运行,结果是65535,这是printf自身的原因。你要做的就是避免因为指类不同而引起的段错误(非法内存访问)。
c语言char和int可以互相赋值,但指针不能赋值,char *和int *不能直接...
而int 则是两个字节16个二进制位 由于指针所指向的是变量的起始地址 那么在当指针指向一段连续内存时 它找到每个变量是通过对起始地址运算得到的下一个元素的起始地址 然后根据长度 取出里面的内容 输出我们想要的格式 所以不同的类型长度不同 相互赋值 必定无法得到想要的结果 ...
在51单片机中,不同类型的数之间能相互赋值吗?它们的指针呢,能相互交换...
不同类型之间是不能直接赋值的,要经过类型的强制转换:int型占4个字节,char型占1个字节,小的给大的类型一般的编译器是可以通过的,但大的给小的你就要指明了 举个例子:int a=2;char b=5;a = b; /*这种操作一般是允许的*/ b = (char)a; /*这需要类型转换*/ ...
C语言中,前后定义的变量的指针不同,相互之间无法进行赋值及运算吗?
不是这样的。C语言中的函数调用是单向的,仅仅是传递数值,所以在调用函数期间,函数内部变量所更改的直是无法传递回主调函数的。要把函数调用期间的变量值返回主调函数应该使用指针变量。下面是修改好的程序,在程序中,函数的形式参数采用指针变量,而函数调用时就把需要改变变量的地址传入到被调用函数中...
为什么不能将const指针赋给非const指针,而能反过来弄
防止你误操作嘛。。。const修饰的对象不能进行写操作,如果你可以直接赋值不就能修改那个对象的值了嘛。。。但是可以进行类型转换。。。const int i = 0;int* p = (int*)&i;这样就没问题了,但是不推荐。理由同上。其实C的类型限制很薄弱的。。比如以下代码没有类型转换却也没有错误。const int ...
二维数组名不能赋值给二级指针- -
回答:你理解的是对的,但是错在,a是指向一维数组,p是指向int*,这两个不等价。a指向一维的int数组,内存大小为sizeof(int)*数组长度;而p只是指向一个int*类型指针,内存大小为4。指针指向的类型实际是不同的。这里你可能又有疑惑,为啥int b[10]一维数组就可以赋值给int* pb = b呢,这是...
c语言中指针变量为什么不能给int变量赋值
指针变量 里面是地址, int 变量里面是整数。整数和地址是2个不同的东西。地址是一种标识,而这种标识和整数没有关系。赋值一般发生在同一类型的变量之间,或者可以强制转换的变量类型之间。地址不能强制转换到整型。不能因为地址看起来像数字就认为它是整型。
二维数组名为什么不能直接赋值给二级指针。
。而二级指针在真正意义上也是一个指针,但它是一个指向指针的指针。在寻址时,拿整型数组举例,直接引用数组名,系统会在数组名指向的地址往后寻址2个字节得到一个整型数字。而引用二级指针时,系统会在指针指向的地址后寻址4个字节得到一个地址,所以两个不能相互赋值。纯手打,求采纳啊。
C语言问题
C语言是强类型的,不同类型不能相互赋值,其他三项都错了,,所以你应该明白了?再解释一下C为什么对:是这样的,数组的访问方式分为两种:指针访问和下标访问,简单的说一个一维数组a,a[1]和a+1的访问是一样的效果,但是计算机执行的时候,会先取出a数组的首地址,然后加偏移地址去访问内存,如果...
C语言里:为什么不能将int型变量直接赋值给指向int型变量的指针
因为指针里实际保存的是地址 比如 int a = 0;int *p ;p = &a; //这是指向int型变量的指针,它保存的a这个变量所在的地址,比如,a保存在内存地址为0x00010011,那么p保存的就是0x00010011 所以不能直接把int型变量赋值给指针