c语言 指针如何赋值 70
后在主函数中调用 void int("ascc")
可以正常赋值
但如果把int 函数中的内容加到主函数中
*pp="ddd"
时便无法赋值 无法得到正确的结果 展开
1、变量的指针就是变量的地址。存放变量地址的变量是指针变量。即在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个变量的地址或称为某变量的指针。
2、为了表示指针变量和它所指向的变量之间的关系,在程序中用“*”符号表示“指向”。
3、定义指针变量.对指针变量的定义包括三个内容:指针类型说明,即定义变量为一个指针变量和指针变量名的基本形式类型说明符*变量名。
4、int i,j;表示i,j是一个指针变量,它的值是某个整型变量的地址。或者说i,j指向一个整型变量。至于i、j究竟指向哪一个整型变量,应由向i,j赋予的地址来决定。
5、int *s是指向整型变量的指针变量,float *d是指向浮点变量的指针变量,char *g;是指向字符变量的指针变量。应该注意的是,一个指针变量只能指向同类型的变量,如s只能指向浮点变量,不能时而指向一个浮点变量,时而又指向一个字符变量。
6、指针变量的引用,指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。
指针在用要注意初始化,例如:
int *p;
p为指针,地址是未知的,如果直接赋值
*p=a;这样编译可以通过,但是会产生警告,p的地址是随机分配的,这样对未知的地址赋值很危险,可能会覆盖掉某些重要数据,所以避免这种危险,在定义指针时注意初始化,也就是赋值。
可以int *p=&a;
或者int *p;
p=&a;
然后再对p进行操作
有错。
注意大小写,还有
int a=9;
int *p;
p=&a;//这个是指针指向a
*p=8;
这样就对了。
扩展资料:
指针的赋值
int *p;
int a;
int b[1];
p = &a;
p = b;
指针的赋值,“=”的左操作数能够是*p,也能够是p。
当“=”的左操作数是*p时,改变的是p所指向的地址存放的数据;
当“=”的左操作数是p时,改变的是p所指向的地址。
数组的变量名b表示该数组的首地址,因此p=b;也是正确的
同类型的指针赋值:
int val1 = 18,val2 = 19;
int *p1,*p2;
p1 = &val1;
p2 = &val2;
p1 = p2; //注意啦,p1指向了val2,而没有指向val1
备注:字符串与指针的初始化和赋值
初始化:
char *cp = "abcdefg"; //这个初始化过程,是将指针cp指向字符串的首地址,而并非传递字符串的值。由于,在C语言里面,没有总体处理一个字符串的机制
赋值:
cp = "abcdefg";
*cp=”abcdefg” ;//错误!字符串常量传递的是它的首地址,不能够通过*cp改动该字符串的值,由于该字符串为常量,而它仅仅是简单的将指针指向该字符串常量。
相同的变量名在不同的函数里可是完全不同的。比如你的那个char *pp;
void init( char *pp);
int main()
{
char *pp="ddd“;//这里的pp和init里pp完全没关系的哦。
//想得到你要的结果的话,这样就好了:
init(pp);//这就叫函数调用,还有哦,这里pp和函数声明里的pp以及init里pp还是不同的哦,他们只是单纯的在值上是相同而已。
return 0;
}
希望明白了。
以上
int *p;
int a;
int b[1];
p = &a;
p = b;
指针的赋值,“=”的左操作数可以是*p,也可以是p。
当“=”的左操作数是*p时,改变的是p所指向的地址存放的数据;
当“=”的左操作数是p时,改变的是p所指向的地址。
数组的变量名b表示该数组的首地址,因此p=b;也是正确的.
同类型的指针赋值:
int val1 = 18,val2 = 19;
int *p1,*p2;
p1 = &val1;
p2 = &val2;
p1 = p2; //注意啦,p1指向了val2,而没有指向val1