学习指针遇到问题了

来源:百度知道 编辑:UC知道 时间:2024/05/28 23:49:11
我在学习C语言在看曾怡的视频教程,遇到问题了
在看第27集6分12秒时看到char *p="abcd"好像是对的,可是在看到第10分09秒时那个*q="oringe"时又说是错的,我搞不懂啊.同样的为什么会错啊
还有一个问题在看24集13分31秒时有个float *p2=&a;是什么意思?和p2=&a有什么区别?看不懂,请求高手解答

我来告诉你吧~
char *p="abcd"是正确的,它可以写成这样:
char *p;
p="abcd";
p表示的是一个地址,而"abcd"是一个字符串,在c语言中,字符串是以数组形式存储的,若要把字符串赋给指针,其指代的是把其数组的首地址赋值给它,所以这个语句是把此字符串的首地址赋值给了指针 p;
而*q="oringe";
你应该知道,*p表示的是p地址所指向单元内的存储内容,是一个变量,而对于一个字符串,是不允许赋值给一个变量的,所以 这样是错误的。它可以这样写:
char *q;
q="oringe";
或者是:
char *p="oringe";
而不可写成:
char *q;
*q="oringe";

float *p2=&a
它和我上面所说的是一样的,
依然可以写成这样:
float *p2;//* 定义一个浮点型指针变量p *//
p2=&a;//*把a的地址赋给p2,且你应该知道符号 & 是取地址的意思*//

这样,你应该知道float *p2=&a和p2=&a有什么区别,
一个是定义变量时就赋值,一个是只是赋值(当然,赋值之前一定要先定义,否则就不正确了)

char *p="abcd"这样是没有错的,
但:
char *p;/*声明时,*p是个指针*/
*p="abcd";//这样是错的.在这里的*p已经不是指针,而是它所指的内存单元的内容,"内存单元的内容"当然不能等于"abcd".如下可以:
char *p;//声明一个指针
char b;/声明一个变量/
p=&b;//把变量的地址赋给指针
*p='a';//指针指向的内存单元赋予字符'a'

*q="oring