这个函数也不需要这样的指针,修改如下即可:
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改动该字符串的值,由于该字符串为常量,而它仅仅是简单的将指针指向该字符串常量。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)