指针之间也不能随意赋值。
看个比较典型的C语言笔试题。
有三个定义,问以下赋值语句哪几个不正确?
大家也不妨把视频暂停思考一下,把答案留在评论区。
s 是个二维数组,三行十列;
k 是个指针,指向有三个元素的数组;
p 就是个简单的 char 类型指针。
第一个 p = s。
s 是二维数组的数组名,表示二维数组首行的地址,如果让 s 加一,会加 10 个字节;
而指针 p 只是个字符指针,p+1 只加了一个字节。
这两个含义不一样,不能赋值。 第二个 p = k。
k 指向的是数组,p 指向的是字符,同样也是对不上,不能赋值。
第三个 p = s[0]。
s[0] 表示数组首行首元素地址,既然是元素的地址,s[0] 加一,就是加 1 个字节。
p也是元素的地址,这两个含义一样,可以赋值。
第四个 k = s。
s 是二维数组首行的地址,首行有 10 个元素。
k 虽然也指向一维数组,但是只有三个元素,10 个元素和 3 个元素也对不上,不能赋值。
所以答案就是,除了第三个,其他的都不能赋值。
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
原文标题:指针之间不要随意赋值
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
相关推荐
地址指针是32位的,int *才16为,赋值会出现截断比如int *souraddr;souraddr =(int *)0x40000;出现这个警告:conversion from integer to smaller pointer查看结果:souraddr=0求大神指
发表于 01-31 17:11
要发送出去数据就是给SBUF赋值,可是赋值之后接收到的和赋给SBUF的值不一样呢?接收到的数据为什么不是5呢?? 用LabVIEW读取的也是这样 85 85 85。不知道是哪里出错了,
发表于 08-14 22:46
,是多少呢,结果是11,因为我们使用*p赋值,就相当于a=11,赋值效果一样的。3:指针的指针,是面对于
发表于 09-19 00:12
:unsigned char *gets;将数组的值赋给指针用strcpy函数。strcpy((unsigned char *)gets,(const unsigned char *)dd);这样写对不对。我通过测试,dd的值并没有赋值给
发表于 04-03 00:31
,比如读、写、调用函数等。 2、永远不要使用“野”指针 前面说了,指针的内容是 地址,是内存地址,一旦你拥有了一个指针,你也就有了权力去通过这个指
发表于 08-20 08:30
嗨,尽管阅读了几个互联网和论坛的问题/答案,我还是不明白为什么下面的代码会产生“来自不兼容指针类型的赋值”。为什么这个警告的代码运行正常?嫦娥发出同样的警告。问候语,CJ。
发表于 04-26 12:47
是一个指针,指针指向一个地址,我们不能把值10赋给一个地址。因此我们如果要赋值只能这样做:b=&a。把a取地址就可以赋值给指针了。同时,在
发表于 12-18 14:10
给C语言指针赋值有何作用?给普通变量的赋值与给指针变量的赋值有何不同?
发表于 02-25 06:10
提额度了好高兴,但是要注意不要随意相信提额短信,下面就让微辰金服来说说吧。 套路一:谎称信用卡可以提升额度 还可能会仿照银行的短信,通过伪基站改号软件用和银行官方客服电话相同的号码发送短信
发表于 12-12 14:05
•113次阅读
对于VerilogHDL语言中,经常在always模块中,面临两种赋值方式:阻塞赋值和非阻塞赋值。对于初学者,往往非常迷惑这两种赋值方式的用法,本章节主要介绍这两种文章的用法。其实,有
发表于 01-30 17:41
•2.1w次阅读
51单片机-指针1. 指针变量a的指针=变量a的地址再定义一个变量p,来存放a的地址(指针),p就是指针变量,简称
发表于 11-12 09:51
•33次下载
C语言指针的理解使用指针变量的声明给普通变量的赋值对比给指针变量的赋值代*的指针的使用说明
发表于 01-13 13:42
•3次下载
如果说指针在一些人心中是导致代码“极其不稳定的奇技淫巧”,那么“函数指针”则是导致代码跑飞和艰涩难懂的罪魁祸首。然而,函数指针的定...
发表于 01-26 19:51
•2次下载
今天给大家普及一下阻塞赋值和非阻塞赋值的相关知识
发表于 07-07 14:15
•1459次阅读
”=“阻塞赋值与”
发表于 09-12 09:06
•649次阅读
评论