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

指针相关

程序员文章站 2022-03-11 22:31:24
...

计算机考研机试笔记之C/C++基础5

指针

指针:变量存储在内存中某一个地址标识的存储空间中,在程序中,通过使用指针,获取变量地址。因此,在程序中输出指针的值为unsigned的整数。
指针变量:用来存放指针的变量。
&取地址运算符。

#include <stdio.h>
int main() {
	int a = 12;
	int *b = &a;
	printf("%d\n",a);
	printf("%d\n",&a);
	printf("%d\n",b);
	return 0;
}

输出:

12
6356744
6356744

指针与数组

数组名可以作为数组的首地址,比如数组int a[10],则a的值为a[0]的地址,a+2的值为a[2]的地址。

#include <stdio.h>
int main() {
	int a[10] = {1,2,3,4,5};
	printf("%d\n",sizeof(int));
	printf("%d\n",a);
	printf("%d\n",a+2);
	printf("%d\n",*a);
	printf("%d\n",*a+2);
	return 0;
}

输出:

4
6356712
6356720
1
3

由于int是占四个字节存储空间,a[0]的存放地址是6356712,a[2]与之相隔两个int型数据,故地址为6356712+4*2 = 6536720

指针作为函数参数

通过指针将变量地址传入函数,可以直接修改变量的值。
常见的例子:

#include <stdio.h>
void swap(int a,int b){//此方式没能转换a与b的值
	int temp = a;
	a = b;
	b = temp;	
}
void p_swap(int *a,int *b){//此方式能够转换a与b的值
	int x;
	int *temp = &x;//声明指针时最好初始化 
	*temp = *a; 
	*a = *b;
	*b = *temp;
	free(temp);
}
int main() {
	int a = 2,b = 5;
	printf("before\t\ta = %d,b = %d\n",a,b);
	swap(a,b);
	printf("usual way\ta = %d,b = %d\n",a,b);
	a = 2;
	b = 5;
	printf("before\t\ta = %d,b = %d\n",a,b);
	p_swap(&a,&b);
	printf("point way\ta = %d,b = %d",a,b);
	return 0;
}

输出:

before          a = 2,b = 5
usual way       a = 2,b = 5
before          a = 2,b = 5
point way       a = 5,b = 2
相关标签: 指针