C语言代码分析:数组名与数组地址的区别
如果将*p = a换成*p = &a,代码将会报错。这是因为a是数组名,它代表的是数组的首地址,而&a代表的是数组的地址,是一个指向整个数组的指针。在这种情况下,p的类型是int*,而&a的类型是int(*)[5],它们的类型不匹配。
因此,对于*p = a,p++会使p指向数组中的下一个元素,然后输出*p的值,即输出1。
而对于*p = &a,p++会使p的值增加sizeof(int*)个字节,即使p指向一个无效的内存地址。接着,尝试输出*p的值,这时会发生未定义的行为,因为p指向的是一个无效的地址,可能会导致程序崩溃或产生不可预测的结果。
原文地址: https://www.cveoy.top/t/topic/qikq 著作权归作者所有。请勿转载和采集!