指针之间也不能随意赋值。
看个比较典型的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 个元素也对不上,不能赋值。
所以答案就是,除了第三个,其他的都不能赋值。
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
183文章
7646浏览量
146108
原文标题:指针之间不要随意赋值
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
DSP中怎么给地址指针赋值
地址指针是32位的,int *才16为,赋值会出现截断比如int *souraddr;souraddr =(int *)0x40000;出现这个警告:conversion from integer to smaller pointer查看结果:souraddr=0求大神指
发表于 01-31 17:11
SBUF怎么赋值呢?
要发送出去数据就是给SBUF赋值,可是赋值之后接收到的和赋给SBUF的值不一样呢?接收到的数据为什么不是5呢?? 用LabVIEW读取的也是这样 85 85 85。不知道是哪里出错了,
发表于 08-14 22:46
dd的值没有赋值给指针
:unsigned char *gets;将数组的值赋给指针用strcpy函数。strcpy((unsigned char *)gets,(const unsigned char *)dd);这样写对不对。我通过测试,dd的值并没有赋值给
发表于 04-03 00:31
【设计技巧】指针的使用注意事项:空指针、指针赋值、void *指针
,比如读、写、调用函数等。 2、永远不要使用“野”指针 前面说了,指针的内容是 地址,是内存地址,一旦你拥有了一个指针,你也就有了权力去通过这个指
发表于 08-20 08:30
为什么代码会产生来自不兼容指针类型的赋值
嗨,尽管阅读了几个互联网和论坛的问题/答案,我还是不明白为什么下面的代码会产生“来自不兼容指针类型的赋值”。为什么这个警告的代码运行正常?嫦娥发出同样的警告。问候语,CJ。
发表于 04-26 12:47
c语言函数指针定义,指针函数和函数指针的区别
往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂。下面就由小编详细为大家介绍C语言中函数指针,指针函数和函数指针
发表于 11-16 15:18
•4295次阅读
深入了解void指针背后的机理
当使用关键字void声明指针变量时,它将成为通用指针变量。任何数据类型(char,int,float等)的任何变量的地址都可以赋值给void指针变量。
发表于 05-06 09:49
•1711次阅读
求求你,不要再纠结指针了(2)——函数指针
如果说指针在一些人心中是导致代码“极其不稳定的奇技淫巧”,那么“函数指针”则是导致代码跑飞和艰涩难懂的罪魁祸首。然而,函数指针的定...
发表于 01-26 19:51
•2次下载
数组名之间可以直接赋值吗
数组之间的赋值能不能直接使用等于号?比如这样的代码。 int main(){ int a[5] = {1, 2, 3, 4, 5}; int b[5] = {0}; b = a
为什么指针之间不要随意赋值呢?
评论