对标准c++各种名词或喜欢咬文嚼字的人帮个忙吧!C/C++ codevoid compare1(const char (&v1)[2]){cout v1
对标准c++各种名词或喜欢咬文嚼字的人帮个忙吧!
C/C++ codevoid compare1(const char (&v1)[2]){ cout << v1 << " " << &v1 << endl; cout << *v1 << endl; cout << v1[0] << endl;}void compare2(const char (*v1)[2]){ cout << v1 << " " << *v1 << endl; cout << *v1 << endl; cout << v1[0] << endl;}int main(int argc, char *argv[]){ compare1("a"); compare2(&"a"); cout << endl; system("pause"); return 0;}
compare2中的v1毫无疑问是个指针,但compare1中的v1呢?
它具有了指针的性质,但在cout<< v1时,两个函数的表现不一样!
compare1输出"a",compare2输出地址!
那么v1到底算是什么东西呢?
ps:这其实是我一个帖子里的讨论内容,我现在专门提出来问!因为大部分人说是指针,可又没有论据!
[解决办法]compare2 中用
typeid分别输出一下 v1 *v1
[解决办法]#include "stdafx.h"
char c [5]="1234";
char(*p)[5] = &c;//这是定义的行指针,那么p就应该存放的是指向一行数据的地址,需要取这个数组的地址
char *q =c;//q存放的是是c数组第一个元素的指针、跟上面的一个p意义是不一样的
char(&d)[5]=c;//这里定义的是数组的引用
int main(int argc, char* argv[])
{
printf("%p %p\n",c,p);//虽然输出的值是一样的,但是代表的意义是不一样的
printf("%c %c ", *d,*(d+1));//这就说明数组的引用是一般的指针
printf("%c %c ",*(*p),*(*p+1));//这是行指针的,用法,
//综上说明,
return 0;
}
可以运行这个程序,看看输出结果就知道怎么回事了,还有一个&"abcd",这个用法编译器不报错吗
这个程序中,设计到了指针,行指针,数组的引用,区别和联系,你可以稍微改动一下就可以测试出,各个东西的区别