C语言指针笔记

本文详细介绍了C语言中一元运算符`&`和`*`的用法,`&`用于获取变量地址,`*`用于解引用取值。通过实例展示了指针如何赋值、取值及动态修改内存中的值。还提供了代码示例,包括字符串操作、指针加减以及内存中的数据操作。强调了指针作为变量可以直接使用,无需额外解引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一元运算符&用于取一个对象的地址
p = &c
将C的地址赋值给变量p,我们称p为“指向”c的指针。

一元运算符是间接寻址或间接引用运算符运算符。当他作用于指针时,将访问指针所指向的对象。
(ps:这才是正确的,不是其他书上的
是表示指针什么的,而是间接寻址的作用在指针上的体现是访问指针所指向的对象,即取该地址的值)

综上,&是用来改地址的,*是用来取值的

int x = 1, y = 2, z[10];
int *ip; /* ip为int类型指针 */
ip = &x; /* ip指向了x的地址 */ !先使用了x的地址! 之后才赋值整数,而“直接赋值整数是不行的”
y = *ip; /* 因为ip指向了x的地址,所以*取了x地址的值,即1 */
*ip = 0; /* *ip:ip的地址的值赋值为0,同时是x的地址,所以x=0 */ !指针不能赋值整数!
ip = &z[0]; /* ip此时指向了z[0]的地址 */

地址在那里,是不会变的。但是指针指向哪里,是可选的。

语句(*ip)++中的圆括号是必需的,否则,该表达式将对ip进行加1运算,而不是对ip指向的对象进行加1运算,这是因为,类似于 星号和++这样的一元运算符遵循从右到左的结合顺序。

因为指针也是变量,所以可以直接使用,不需要再次间接引用(*)
iq = ip

一个练习

#include<stdio.h>

main()
{ 
	char s[20] = "abcdefGHI";  //长度为20的字符串,"{}"则是数组的标记
	char*p = "1234567";
	printf("%s\n",s + 2);  //从字符串第[2]开始至结束,cdefGHI
	printf("%s\n", &s[2]); //&取地址,取s的地址,再取其[2]开始,所以是至结束cdefGHI。且
	printf("%c\n",s[2]);  //结果:c。因为取的是%c,取字符串的[2]位
	printf("%s\n",p + 5); //67,从指针的[6]开始,取到末尾
	printf("%s\n",strcat(s + 3, p + 4));//字符串连接函数,返回值为s+3的地址,如果换为s+4,不影响连接,影响输出结果。从s[3]开始到末尾接上 p[4],为:defGHI567
	printf("%d\n",strlen(p + 2));//有效字符个数,不包括\0,为:5
	printf("%s\n",strcpy(p + 3,s + 9));//从p+3地址开始被s+9到\0替换  为空
	printf("%s\n",s);   //abcdefGHI
	scanf("%s",s + 3);/*输入:ABC  DEF<回车 >*/ //scanf遇到空格和回车都会停止读入,所以最终制度入ABC,若需要空格则选用Gets()函数
	printf("%s",s);    //由上可知为:abcABC
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值