指针的概念及使用

写在前边:

1.*:解引用运算符

2.&:取地址运算符

3.指针也是一种数据类型,是由其他数据类型派生出来的。指针的最大作用是构造数据结构:将不连续的内存空间连接在一起。通过解引用运算符(*)获取p在内存地址上保存的值,*p就代表指针p所指向的内存单元中的值

 

正文:

1.当定义一个变量(int a=100)后,计算机会将变量a的值100转变为二进制储存进一段连续的内存空间,第一个内存空间的编号就是变量a的地址,使用&a可以获取该地址值。

2.当定义一个指针(int *p)后,c程序会在内存中划分一段内存空间,用来存储*p的值。指针类型为int,指针类型的变量为p。

3.当定义一个指针指向变量a的地址(int *p =&a)时,称:p是指向int类型变量a的指针,简称p指向a。此时指针变量p的值,是变量a在内存中存储的第一个地址单元的编号即&a。通过指针类型(int),c程序可以知道这个指针指向的数据占用了4个内存单元,从而正确读出a存储在4个内存空间上的数据。

指针的加减运算:当p = p+1时,p所保存的地址会加上指针类型(int)所占用的存储单元的个数(int是4个字节,即4byte=4*8bit),从而使指针跨越当前数据,指向下一个完整的数据。

例:

int main() {

	int a = 100;
	int *p = &a;
	printf("%s %d\n","定义指针后,将a的地址赋给p,p的值:",p);
	printf("%s %d\n","a的地址:",&a);
	printf("%s %d","使用解引用运算符获取指针p所指向元素的值,即为a的值:",*p);
}

依次输出:

>>>定义指针后,将a的地址赋给p,p的值: 6422036
>>>a的地址: 6422036
>>>使用解引用运算符获取指针p所指向元素的值,即为a的值: 100

 

指针的使用,以传值和传址为例:

例:写一个程序,交换a和b的值

1.错误示范:

int main(){
    int i = 3;
    int j = 5;
    swap(i,j);
    printf("%d\n%d",i,j);

}
int swap(int x,int y){
    int buf;
    buf = x;
    x = y;
    y= buf;
    return 0;
}

输出:

>>>3,5

2.修改代码如下:

int main(){
    int i =3;
    int j =5;
    swap(&i,&j);
    printf("%d\n%d",i,j);
}

int swap(int *x,int *y){
    int buf;
    buf = *x;
    *x = *y;
    *y= buf;
    return 0;
}

输出:

>>>5,3

 

 

其他关于传值和传址的解释说明:

http://c.biancheng.net/view/216.html

https://blog.csdn.net/ljx_5489464/article/details/50035875

 

posted @ 2023-02-28 10:10  _titleInfo  阅读(197)  评论(0编辑  收藏  举报
//雪花飘落效果