a[]和*a区别

#include<iostream>
using namespace std;
char *name(){char a[]="asdf";return a;}

char main(){cout<<name()<<endl;

return 0;}

为什么输出不对
把a[]改成*a就对了

1、a++先用后加,++a先加后用。b=a++;先把a的值赋给b,然后a自增1。b=++a;a先加1,然后把自增后的值赋给b。

2、a++运算优先级要高于算术运算b*a++,b*a , a=a+1。b*++a,a=a+1,b*a。无论是a++还是++a 运算一次后 a的值是一样的,受影响的是赋值对象。

拓展资料:

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-26
char *name(){
    char a[]="asdf";  // 这是一个数组,在栈分配空间,用"asdf"作初始化。函数退出后,这个栈分配的空间将被释放。如果定义为char*a = "asdf"; a是一个指针,指针字符串常量"asdf",这个常量是存在常量区的,整个程序生命期内都有效,而返回的只是这个地址,而不是栈的地址,所以在主调函数中,是可以取到正常的内容
    return a;
}

本回答被提问者采纳
第2个回答  2014-06-24
char a[]定义的是一个数组,char *a定义的是一个指针;
char a[]="asdf",这时候数组a是存放在函数的堆栈中的,函数推出时这个堆栈就被清除了。char *a="asdf","asdf"是一个常量,不存放在堆栈中,而是放在一个特殊的段当中。具体你可以用printf("0X%x\t0X%x\n",name,a);看下。定义成数组时这两个地址很靠近的,但是定义成指针就不是的了。试试吧
第3个回答  2014-06-24
char a[] 你定义的是一个局部变量 函数结束时候就释放空间了,所以根本传不到main函数
你可以在 static char a[] //定义全局变量就可以了本回答被网友采纳
第4个回答  2019-09-09

an和a的区别,用法区别