c语言 指针赋值

c语言 指针赋值,第1张

空定义了一个指针temp,但是temp没有指向任何变量,所以不能对它所指向的地址赋值(temp=p1是在对temp指向的地址赋值,既然它没有指向任何已知的地址,当然结果是不可预见了)
这个函数也不需要这样的指针,修改如下即可:
swap(int p1,int p2)
{int temp;
temp=p1;
p1=p2;
p2=temp;
}

1、既然是指针变量,那么将一个变量的地址值赋值给该指针变量即可!
2、至于具体讲一个地址值赋值给指针有两种方法:一种就是用取地址符&来 *** 作内嵌变量,另一种就是通过采用malloc函数动态开辟内存并将内存地址值赋值给指针变量。
3、举例说明:定义int型指针变量int p;和int型变量int a;那么将a的地址值赋值给p:p=&a;另一种方式是动态方式:p = (int)malloc(size(int));

可以,但int p;p=7;这样不行。

因为“能直接给指针指向的数据”赋值,而这里的p还没有指向,所以不能赋值,这种指针有个名字叫“悬浮指针”,是不能给它赋值的。

这样才可以:

int a,p=&a;p=7;

实际上就是使a等于了7。

扩展资料:

注意事项

也可以使用赋值运算符为指针变量赋值,但要保证两个指针变量的类型相同。

假设有如下变量定义:

int i,j,p,q;p=&i;q=&j;

这两句将变量i和j的地址分别赋值给指针变量p和q;

执行了q=p后,执行该条语句,指针变量p和q都指向了同一个变量i,因此指针变量p和q中存放的都是变量i的地址&i。变量i此时并没有初始化,只为其分配了内存单元。

注意理解:q=p;和q=p

前者为指针变量q赋值,即将指针变量p中存放的某个变量的地址赋值给q。显然,赋值后,q和p就指向了同一个变量。

后者将p指向变量的赋值给q指向的变量。

例子:

p=&i;

q=&j;

i=2;

j=3;

p就是一个双重指针啊,意思就是说这个指针变量里面放的是一个指针的地址(一般的指针变量里面放的是一个变量的地址),这么说不知道你明不明白。
通过指针变量获得地址值:
int
p;//双重指针
int
q;//普通指针
p=&q;//将指针q的地址赋值给p
通过标准函数获得地址值:
int
p;
p=(int)malloc(nsizeof(int));//动态创建n个int类型的指针变量空间
其实说白了双重指针就是二维数组的头指针,数组的每一行的开头就是那一行所代表的一维数组的指针,二维数组头指针就是每一行的头指针的地址数组。

我自己都觉得指针这个东西好绕。。。。不过多用就明白了。

1、指针变量的赋值,分为定义时赋值(初始化)和单独赋值,如:
int x ;
int px=&x ; //定义时赋值,也称初始化,注意这里的是跟随int的,即变量px是int 类型变量! 实际上的赋值语句是px=&x ;
int py ;
py=&x ; //单独赋值,将py指向x
py=10 ; //这里的,是引用指针中的数据 *** 作符,跟随的变量必须是指针类型变量,否则会出错! py就是x,这里相当于x=10;
2、指针变量作为函数的参数时,子函数可以通过指针引用实参地址中的数据,达到修改实参地址中的数据。如:
#include <stdioh>
void func( int a, int b, int pmax )
{
if ( a>b ) pmax=a;
else pmax=b ;
}
void main()
{
int a=2,b=3,max=0;
func(a,b,&max ); //这里将变量max的地址传递到子函数,子函数中通过该地址,可以修改max的值,达到子函数结束后,max能带回运算结果的效果。
printf("max=%d\n", max );
}

指针在用要注意初始化,例如:

intp;

p为指针,地址是未知的,如果直接赋值

p=a;这样编译可以通过,但是会产生警告,p的地址是随机分配的,这样对未知的地址赋值很危险,可能会覆盖掉某些重要数据,所以避免这种危险,在定义指针时注意初始化,也就是赋值。

可以intp=&a;

或者intp;

p=&a;

然后再对p进行 *** 作

有错。

注意大小写,还有

inta=9;

intp;

p=&a;//这个是指针指向a

p=8;

这样就对了。

扩展资料:

指针的赋值

intp;

inta;

intb[1];

p=&a;

p=b;

指针的赋值,“=”的左 *** 作数能够是p,也能够是p。

当“=”的左 *** 作数是p时,改变的是p所指向的地址存放的数据;

当“=”的左 *** 作数是p时,改变的是p所指向的地址。

数组的变量名b表示该数组的首地址,因此p=b;也是正确的

同类型的指针赋值:

intval1=18,val2=19;

intp1,p2;

p1=&val1;

p2=&val2;

p1=p2; //注意啦,p1指向了val2,而没有指向val1

备注:字符串与指针的初始化和赋值

初始化:

charcp="abcdefg";//这个初始化过程,是将指针cp指向字符串的首地址,而并非传递字符串的值。由于,在C语言里面,没有总体处理一个字符串的机制

赋值:

cp="abcdefg";

cp=”abcdefg”;//错误!字符串常量传递的是它的首地址,不能够通过cp改动该字符串的值,由于该字符串为常量,而它仅仅是简单的将指针指向该字符串常量。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13394637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-27
下一篇 2023-07-27

发表评论

登录后才能评论

评论列表(0条)

保存