浅析为什么char类型怎么赋值

有一个结构体: 

从上面看sqlchar的data是char类型怎么赋值哦可是下面的代码可以给他赋值,和奇怪啊: 

从上面看就是不一个字符串String,赋值给了一个char类型怎么赋值的成员变量啊!! 

那位高手帮帮忙解释一下啊!!

有两种复制方式看你程序需要選择其中一种。

首先req不是一个指针,那么要访问那个i变量应该用a.i

a.i是一个指针它指向一个b的结构体类型,b里面有一个指针变量j

所以(a.i)->j是一個指向char的指针它可以放地址

优先级我没有查所以a.i加了一个括号。

上边的表达式为什么可以而把p換成数组,然后再赋值就不行了

字符串常量”hello”出现在一个表达式中时表达式使用的值就是这些字符所存储的地址,而不是这些字符本身

     所以,可以把字符串赋值给指向字符的指针p而不能把字符串赋值给一个字符数组。

然后a = “hello”就不行了 “hello”赋值的值是一个地址而a雖然也有地址,但是这与指针是不一样的指针的值是地址,而数组的值不是地址

看到这样的错误提示,你是否会想到把char a[10]改成char a[6]呢

这就和仩边的分析同样的道理了右边的是一个地址,而左边的是一个值

在使用指针的时候指针可以自增,而数组不能自增

是因为a是个常量吔就是说在声明一个指针时,编译器只给指针本身保留内存空间而没有为指针分配内存空间。而数组就不同了编译器给数组分配了空間,数组a的地址就是一个常量了让常量自增这肯定是不行的

      在指针自增的时候,编译器会自动识别类型比如指针是指向int型的,想获取丅一个的地址时指针直接p++就行了,不要多此一举的p+4了

      特别需要注意的是在void指针使用的时候,不能使用指针运算应为void型编译器不能识別类型的长度(即指针所指对象的体积),p++这样就是不合法的即不能进行数学运算,也不能使用*取值操作想使用必须转换为其它的类型

我要回帖

更多关于 char类型怎么赋值 的文章

 

随机推荐