C语言数据指针用途及特点
再譬如如图所示,数组a[2]是个元素,指针也可以找到元素,用哪个方法好,是不是a[2]我要是从别的地方调用,a[]就要设置成全局变量,比较占用ram,要是用指针就有可能省资源?
满意回答我追分 展开
是的
实际上函数在内存中也要占据一片存储单元, 这片存储单元的起始地址, 我们称其为函数的入口地址, 即函数的指针, 函数的入口地址是用函数名来表示的。
因此我们可以定义一个指针变量, 让它的值等于函数的入口地址, 然后可以通过这个指针变量来调用函数, 该指针变量称为指向函数的指针变量 。
这里还有两个简单程序关于指针和数组的区别
①实参和形参都用指针变量
#include <stdio.h>
void inv3(int *x , int n);
void main( )
{ int *p , a[6]={1, 3, 4, 6, 7, 9};
p = a ;
inv3( p , 6 );
for( p=a ; p<a+6 ; p++ )
printf(“%3d”, *p );
printf(“\n”);
}
void inv3(int *x , int n)
{ int temp, m=(n-1)/2;
int *p , *i , *j ;
i=x ; j=x+n-1; p=x+m;
for( ; i<=p ; i++, j-- )
{ temp=*i ; *i=*j ;
*j=temp ; }
}
②实参用指针变量, 形参用数组名
#include <stdio.h>
void inv4(int x[ ] , int n);
void main( )
{ int *p, a[6]={1, 3, 4, 6, 7, 9};
p = a ;
inv4( p , 6 ) ;
for( p=a ; p<a+6 ; p++ )
printf(“%3d”, *p );
printf(“\n”);
}
void inv4(int x[ ] , int n)
{ 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; }
}
2023-08-15 广告
在函数带如参数的时候会非常的方便
处理链表很方便
就是处理起来麻烦
在函数带如参数的时候会非常的方便
例如
void swap(int *x, int *y)
{
int p = *y;
*y = *x;
*x = p;
}
void main()
{
int a[10],i;
int max,min,max_i = 0,min_i = 0;
scanf("%d",&a[0]);
max = min = a[0];
for(i = 1; i <10; i++)
{
scanf("%d",&a[i]);
if(max <a[i])
{
max = a[i];
max_i = i;
}
if(min > a[i])
{
min = a[i];
min_i = i;
}
}
swap(&a[max_i], &a[min_i]);
for(i =0 ; i <10; i++)
{
printf("%d ", a[i]);
}
}
至于你说的第二个问题,用数组比用指针安全、保险,不容易出错。所以如果能用数组引用元素的话,就尽量不用指针。
2.指针作用:指向这个变量或数组的首地址,是变量的间接引用方式。其值如果改变,变量的值或数组元素的值也会跟着改变。程序对变量的操作实际上是对变量所在的存储空间读取和写入数据。方便对变量的操作。
3.举例说明:
int a=3;/*定义一个整型变量a,并赋初值3*/
int *p;/*定义一个指针变量P*/
p=&a;/*让p指向a的首地址,也就是a的地址*/
程序为a分配一个2个字节的存储单元,假如2个字节的地址分别为(ABCD1和ABCD2,唯一),那么p里面放的值就是ABCD1,不是3。这时可通过p直接引用a,实际上*p=3。以后不管a存放在内存中的哪个地方,只用通过调用p就可以引用a。这时如果令*p=4,则最后的a值也为4。对于数组,指针是指向数组的首地址。