字符指针p=str,&赋值,与字符串常量

 其主要赋值的区别在于实际的内存地址空间区别

 1.字符型数组给指针赋值

//指针定义并初始化

char str[] = "hello"; 

char *p = str;   //对于数组,指针定义并初始化时不需要&

//先定义后初始化

char str[] = "hello";

char *p;

p = str;  //注意别写&str

//原因:因为&str做右值时表示整个数组的首地址

对str进行&,即取出str所在的地址,而str已经代表了数组的首地址,因此再取地址无意义 

左值与右值,就是赋值符号(=)的左边的值与右边的值

右值,即一个特定的值。     左值,即可以被赋值的值,理解为程序中占用内存一块空间。

 2.普通数组给指针赋值

 //指针定义并初始化
char a = 65; 
char *p = &a;   //对于普通变量,指针定义并初始化时需要&
 
//先定义后初始化
char a = 65; 
char *p;
p = &a;  

用字符串数组名给指针变量赋值时,不需要在数组名str前加取地址符&  ,因为str已经表示数组首元素首地址,

普通数的变量名给指针赋值时,需要在普通变量名a前加取地址符&,因为&a表示与变量名a绑定的内存空间的首地址

记住,普通变量赋值给指针时,可以加&,而数组赋值给指针的时候不用加&,因为数组名字本身就已经是首地址常量了

3.字符串常量的例子

当有一个指针

char *p1 = "Hello World";

这里指针指向的是一个空间,这个空间内存放的这一整个字符串,这个字符串是一个字符串常量

再有一个char *p2 = "Hello World";

这个p2与p1指针所在的地址不一样,但是指向的地址都是一样的,都是指向"Hello World"这一个字符串常量的地址

此时,这个字符串常量是放在程序的静态区的(全局变量,static修饰的,字符串常量放在程序的静态区),指针p1,p2是变量是放在栈区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值