指针基础知识

文章详细阐述了C语言中指针的概念和作用,包括如何使用指针进行变量交换,一维数组与指针的关系,以及指针变量的运算规则。通过示例代码解释了指针如何允许函数修改其参数的值,以及如何通过指针访问和修改数组元素。此外,还强调了指针在表示复杂数据结构、快速数据传递、处理字符串等方面的重要性。
摘要由CSDN通过智能技术生成

指针

(1)Int * p; 它规定的参数是p,而不是* p

形参和实参一定不是相同的变量。程序从主函数进,也从主函数出,调用函数时才会给形参分配空间,用完后形参的空间又会被释放。

指针互换函数:

# include <stdio.h>

# include <stdlib.h>

 

void swap(int * a, int * b)

{

int k;

k = * a;

* a = * b;

* b = k;

}

 

int main()

{

int a = 3, b = 5;

printf("a = %d, b = %d\n", a, b);

swap(&a, &b);

printf("a = %d, b = %d\n", a, b);

 

system("pause");

return 0;

}

//这个程序中主函数的a,b与swap函数中的a,b是不同的变量。如果没有指针,也不能用return,因为return只能返回一个值,不能返回两个值,那么不管swap函数里面怎么操作,是不会影响主函数中a,b的值的。指针可以指向地址,对地址中的值更改。主函数可以将实参的地址发送给swap函数,一旦得到了地址,就可以用指针对地址中的值进行操作了。互换地址没有意义,用指针互换地址里存放的值才行。

同样,可以用被调函数来修改主调函数的值,对被调函数中的* a赋值即可。

(2)一维数组,以a[5]为例,a(一维数组名)是一个指针常量,是int *类型,存放的是数组的第一个元素的地址,即首地址。

确定一个一维数组需要的参数:a,即数组的首地址,和数组长度。数组没有结束标志,但字符串有,以/0为结束标志,所以确定字符串只需要首地址就可以。

用指针输出一维数组的值:

# include <stdio.h>

# include <stdlib.h>

 

void shuchu(int * a, int len)

{

int i;

for (i=0; i<n; i++)

{

printf("%d", *(a+i));//也可以写成a[i]

}

printf("\n");

}

 

int main()

{

int a[5] = {1, 2, 3, 4, 5};

shuchu(a,5);

 

system("pause");

return 0;

}

用指针输出一维数组的某个值:

# include <stdio.h>

# include <stdlib.h>

 

void shuchu(int * s, int len)

{

s[3] = 88;//这里的s[3]就等同于*(s+3),也就是说,s[3]相当于a[3],也相当于*(a+3)

}

 

int main()

{

int a[5] = {1, 2, 3, 4, 5};

printf("%d\n", a[3]);

shuchu(a,5);

printf("%d\n", a[3]);

 

system("pause");

return 0;

}

//a[3]等价于* (a+3),所以a[3]代表第4个元素。

指针变量的运算:只能相减,而且是在两个指针指向同一区域的情况下,一般是数组的时候。

sizeof(数据类型/变量名)——功能:其返回值是该数据类型/变量名所占的字节数。

一个指针变量,无论指向哪种数据类型的变量,它只占4个字节。

一个变量的地址用该变量的首字节来表示,后面的字节是来存储数据的。

(3)指针优点总结:

表示一些复杂的数据结构。

快速传递数据,减少内存的消耗。

使函数返回一个以上的值。

能直接访问硬件。

能够方便地处理字符串。

是理解面向对象语言引用的基础。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值