酱油王 发表于 2021-7-21 16:11:16

数组指针是左值吗?

大佬们,数组指针是左值吗?
我百度不到自己实验了一下,发现数组指针自身的地址可以改变,所以数组指针也是左值吗?

青出于蓝 发表于 2021-7-21 16:19:51

不是左值

万千只cnm 发表于 2021-7-21 17:23:50

左值的关键是要能代表一个内存位置以此来赋值等
char (*p);
char p1;
p1和p都是指向数组的指针

都可以当左值

酱油王 发表于 2021-7-21 22:18:23

本帖最后由 酱油王 于 2021-7-21 22:59 编辑

万千只cnm 发表于 2021-7-21 17:23
左值的关键是要能代表一个内存位置以此来赋值等
char (*p);
char p1;


我看了鱼小c大哥的视频后,我理解的是数组名就是存放这个数组的首地址的“指针”(我知道数组不是指针,所以打了双引号),指针和数组名的区别就是数组名存放的地址不能改变了,但指针可以,这是我用以下代码得出的结果。
//用的是dev c++ 5.1
//这是数组的

#include <stdio.h>

int main(int argc,char *argv[])
{
        char one="qwertyuiop";
       
        one++;                     /*编译时在这里提醒报错: lvalue required as increment operand
                                          所以我以此来判断数组不是一个左值,因为数组名里存放的地址不能改变;
       
        printf("%c",one);      
          
        return 0;
}
但是指针时就可以,这是指针的

#include <stdio.h>

int main(int argc,char *argv[])
{
        char *one="qwertyuiop";
       
        one++;
       
        printf("%c",*one);    //打印的值为'w',也就是说指针里存放的地址往后加了一个字节。
          
        return 0;
}
然后我又试了二维数组,同样提示我这个数组名不是一个左值。
#include <stdio.h>

int main(void)
{
        int one={1,2,3,4,5,6};
       
        one++;                         //也是在这一行报错提示不是左值
       
        printf("%d",**one);   
   
        return 0;
}
然后我又试了数组指针,数组指针存放的地址也可以改变
#include <stdio.h>

int main(void)
{
        int one={1,3,5,7,9,11};
        int (*a)=one;
       
        a++;
       
        printf("%d",**a);   //打印内容为7,也就是说存放的地址往后加了3个int的长度。
   
        return 0;
}

所以我自己总结后感觉二维数组不是左值,数组指针是左值。

万千只cnm 发表于 2021-7-22 12:00:37

酱油王 发表于 2021-7-21 22:18
我看了鱼小c大哥的视频后,我理解的是数组名就是存放这个数组的首地址的“指针”(我知道数组不是指针 ...

那我上面说错了左值应该是能出现在 = 的左边
1
数组名解引用后可以当左值 本身是不能当左值的比如 array = 's'; 但array++ 不行因是为改变了自身
因为数组名代表一个数组的头地址 且本身并没有单独储存空间(指针本身有储存空间,区别之一)也是个指针常量如果能改变数组名的值 整个数组不就找不到了吗

2
操作符也是判断是否可以为左值的 像++ -- 等的结果是个值的拷贝 是右值
必须 * 【】 才能当左值比如“*a++ ”   解引用后才能赋值
运算完为左值的还有 .(访问结构体成员)      -> (指针访问成员)

3
char *one="qwertyuiop";
字符串常量的值是个 指针常量 放在静态存储区
是没法改变字符串常量的值。
所以one 解引用也是改变不了的

4
入门以后建议看看 《c与指针》
就会豁然开朗

酱油王 发表于 2021-7-22 13:51:44

万千只cnm 发表于 2021-7-22 12:00
那我上面说错了左值应该是能出现在 = 的左边
1
数组名解引用后可以当左值 本身是不能当左值的比如 ...

好的,谢谢
页: [1]
查看完整版本: 数组指针是左值吗?