C语言指针

1.操作符 

        1)&取地址

另外一个& 按位与,区别好两者。&按位与是双操作数,两边都有操作数,而地址是单操作数

        2)*解引用 间接访问操作符

int main() {
	int a = 7;
	printf("%p\n",&a);//& 取地址
	int* pa = &a;//pa用来存放地址 pa:指针变量 
	*pa = 6;//*解引用 间接访问操作符 将a的值进行改变
	printf("%d\n",a); //输出*pa也一样的
}

2.指针类型的意义

        1)指针类型决定了指针解引用的权限有多大

它无关的地址是怎么样的,跟你指针变量的类型有关

         2)指针类型决定了,指针每走一步,能走多远(步长)

        先看int类型

         char类型,后面其余都不会变了

补充:对于类型相同的两个指针变量可以进行小于<、等于=、减法运算,不能进行加法运算

注意:我下面是指针跟整数

 指针跟指针相减:得到两个指针之间的元素个数

前提:两个指针要在同一块空间,例如一个数组里面的元素

  那么我们就可以利用此,算出字符串长度。

int strleng(char* str) {
	char* start = str;
	while (*str != '\0')
	{
		str++;
	}
	return str-start;
}

3.野指针

        1)未初始化

        2)指针越界访问

C语言自身不检查数据是否越界,所以最好判断地址是否为空

int main() {
	int a = 0;
	int* p = &a;
	if (p != NULL)
	{
		*p = 10;
	}
	return 0;
}

4.数组跟指针变量命名

arr[2] == *(arr+2) == *(p+2) == *(2+p) == *(2+arr) == 2[arr] 

5.二级指针

int  = 10;

int *pa = &a;

int * *ppa = &pa;//pa也是个变量,&pa取了pa在内存中的起始地址

第一个*是pa的数据类型,第二个*是表明ppa是个指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值