c<8>指针-创新互联

目录

创新互联成立于2013年,先为礼县等服务建站,礼县等地企业,进行企业商务咨询服务。为礼县企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

2,指针的赋值

2.1C语言允许指针赋值为0(初始化)

2.2指针赋值例

2.3输出指针的值

3,用指针引用数组

3.1利用指针输入数组

3.2优先级问题 

4.多维数组

5.字符串

5.1通过指针引用字符串

4.函数中对指针的应用

4.1将指针变量作为函数参数

4.1.1指针的定义

4.1.2指针的引用

4.2将数组传递至函数中

5.函数指针

6.返回指针的函数


1,指针本身是一个地址,以int的形式保存

(32位用四个字节储存,64位操作系统用八个字节储存)

2,指针的赋值

一般来说指针是无法直接赋值的

当然可以用这种形式来强制赋值

(int*) p = 101;
2.1C语言允许指针赋值为0(初始化)
int* a = 0;

常用 :(防止未初始化指针破化内存

if ( p != 0 )
    *p+1=xxxx;

宏定义

#define NULL 0

2.2指针赋值例
#includevoid main()
{
	char c = '9', * sp1, * sp2;
	sp1 = &c; sp2 = sp1;
	printf("%c", *sp2);
}
2.3输出指针的值
pointer_1=&a;	//把变量a的地址赋给指针变量pointer_1
	pointer_2=&b;	//把变量b的地址赋给指针变量pointer_2 
	printf("a=%d,b=%d\n",a,b);	//输出变量a和b的值
	printf("*pointer_1=%d,*pointer_2=%d\n",*pointer_1,*pointer_2);
	//输出变量a和b的值
3,用指针引用数组

当我们定义一个数组时

int a[100]={};

a是数组的首地址,且是以常量指针的形式保存(不能通过a++等来更改

所以当我们针对数组进行一些操作时,通常将之复制到变量指针(P)上。

3.1利用指针输入数组
#includeint main()
{	int i,a[10],*p=a;	//p的初值是a,p指向a[0]
	printf("please enter 10 integer numbers:");
	for(i=0;i<10;i++)
	scanf("%d",p++);



	p=a;				//重新使p指向a[0]
	for(i=0;i<10;i++,p++)
	printf("%d ",*p);
	printf("\n");
	return 0;
}

注意经过一系列 的p++会使得p指向数组的末位。需要读取数组需要重新使指针指向数组的首地址

3.2优先级问题 

++和*为同优先级

从左到右依次执行

4.多维数组

5.字符串  5.1通过指针引用字符串
#includeint main()
{	char string[]="I love China!";	//定义字符数组sting
	printf("%s\n",string);		//用%s格式声明输出string,可以输出整个字符串
	printf("%c\n",string[7]);		//用%c格式输出一个字符数组元素 
	return 0;
}

相当于

#includeint main()
{	char *string="I love China!";	//定义字符指针变量string并初始化
	printf("%s\n",string);		//输出字符串
	return 0;
4.函数中对指针的应用 4.1将指针变量作为函数参数 4.1.1指针的定义

定义函数时需要同时定义指针变量

void swap(int *p1,int *p2)	
{
...
}

值得注意的是:如下的*temp不指向变量而直接赋值,由于temp指向位置为随机,可能会覆盖原有数据,计算机并不允许此类操作

//错误示范
void swap(int *p1,int *p2)
{	int *temp;
	*temp=*p1;
 	*p1=*p2;
	*p2=*temp;
}
4.1.2指针的引用

不需要加*

swap(pointer_1,pointer_2);
4.2将数组传递至函数中
void inv(int x[],int n)		//形参x是数组名
{	int temp,i,j,m=(n-1)/2;
	for(i=0;i<=m;i++)
	{	j=n-1-i;
		temp=x[i]; x[i]=x[j]; x[j]=temp;	//把x[i]和x[j]交换
	}
	return;
}
void inv(int *x,int n)			//形参x是指针变量
{	int *p,temp,*i,*j,m=(n-1)/2;
	i=x; j=x+n-1; p=x+m;
	for(;i<=p;i++,j--)
	{	temp=*i; *i=*j; *j=temp;}	//*i与*j交换
	return;
}

they are the same

5.函数指针

we can use pointers to invoke defined functions

just like

int max(int,int);	//函数声明
int (*p)(int,int);	//定义指向函数的指针变量p

p=max;	//使p指向max函数

c=(*p)(a,b);		//通过指针变量调用max函数
6.返回指针的函数
int *a(int x,int y);

x和y是函数的形参,调用函数可以返回一个Int*型指针

we must return an adress  ##

float *search(float (*pointer)[4],int n)
//形参pointer是指向一维数组的指针变量
{	float *pt;
	pt=*(pointer+n);	//pt的值是&score[k][0]
	return(pt);
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


名称栏目:c<8>指针-创新互联
文章链接:http://pwwzsj.com/article/hiohp.html