欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言指针篇一

程序员文章站 2024-03-07 16:50:15
...

取地址运算

运算符&

1.取一个int变量的地址

#include<stdio.h>
int main()
{
	int i=0;
	printf("0x%p",&i);//用printf输出地址 
 } 
 //&取一个变量的地址
 //但是地址的数据类型和int是否相等取决于编译器和架构 

C语言指针篇一

指针变量(指针变量就是记录地址的变量)

指针变量作为形参

#include<stdio.h>
void fun1(int *p);
void fun2(int p);
void fun3(int p);
int main()
{
	int i=10;
	int j;
	//观察以下三项是否相同 
	printf("&i=0x%p\n",&i);//输出地址 
	fun1(&i);              //以指针为形参,输出地址 
	
	//写法错误,在32位架构下相同,64位架构则不同 
	j=(int)&i;             //强制类型转换,否则会报错 
	fun2(j);               //将地址强制转换为int型,输出地址
	
	
	fun3(i);               //直接在函数里读形参的地址 
	
	
 } 
 
 void fun1(int *p)
 {
 	printf("&i=0x%p\n",p); //这里是p,不是*p
 }
 void fun2(int p)
 {
 	printf("&i=0x%p\n",p);
 }
 void fun3(int p)
 {
 	printf("&i=0x%p\n",&p);
 }

C语言指针篇一
强制类型转换出现Warning,不管它,继续
C语言指针篇一
只有第三个不同。但是要避免第二种写法。

*p和p是什么关系

当p戴上了*的帽子,*p就是当前值,p就只这个值所在地址

#include<stdio.h>
void fun1(int *p);
void fun3(int p);
int main()
{
	int i=10;
	int j;
	//printf("&i=0x%p\n",&i);//输出地址 
	fun1(&i);              //在已知地址上改变 值  
	
	fun3(i);               //读i值 
	
	
 } 
 
 void fun1(int *p) 
 {
 	printf("&i=0x%p\n",p); //p是地址
	printf("&i=%d\n",*p); //*p是值  
	*p=16;
 }
 void fun3(int p)
 {
 	printf("i=%d\n",p);
 }

C语言指针篇一
例1:

#include<stdio.h>
void fun(int a[],int len,int *max,int *min);
int main()
{
	int a[]={1,2,3,4,5,6,7,8,9,12,13,16,17,23,24,25};
	int min,max;
	fun(a,sizeof(a)/sizeof(a[0]),&max,&min);
	printf("min=%d,max=%d\n",max,min);
	
	return 0;
}
void fun(int a[],int len,int *max,int *min)
{
	int i;
	*min=*max=a[0];
	for (i=1;i<len;i++)
	{
		if(a[i]<*min)
		{
			*min=a[i];
		}
		if(a[i]>*max)
		{
			*max=a[i];
		}
	}
}

C语言指针篇一
注:*p必须要被赋值一个变量的地址值,p才能在左边随意改变
如果它没有被赋值一个变量的地址值,不能直接给
p赋值

数组变量是特殊的指针

函数参数表中的数组实际上是指针

const

//表示不能通过这个指针去修改那个变量
const int *p=&i;
*p=26;//error
i=26;//OK
p=&j;//OK


//表示一旦得到了某个变量的地址,不能再指向其它变量
int *const q=&i;//q是const
*q=26;//OK
q++;//Error
*q=&j;//error

//const在*前表示值不能被修改,const在*后面表示指针不能被修改


相关标签: c语言