指针

指针的定义
1 .指针是一个用于存放地址的变量,通过地址找到内存中存储的值(指针是一种对内存的编码);
2.在32位平台下为4个字节,在64为平台下为8个字节;
3. 指针由俩部分组成,指针的类型和指针进行加减之后地址的变化的字节数;

指针的类型
字符指针:char*
使用方式
1.
#include<stdio.h>
int main(void)
{
char i = ‘h’;
char *p = &i;//创建指针变量p,存放i的地址
*p = ‘w’;//解引用并赋值
printf("%c", i);
return 0;
}
2.
int main()
{
char *p = “hello world”;
printf("%s", p);//p中只传递了字符串的首元素地址,类比于数组名;
return 0;
}
例题
int main()
{
char arr1[] = “hello world”;
char arr2[] = “hello world”;
char *arr3 = “hello world”;
char *arr4 = “hello world”;
if (arr1 == arr2)
printf(“1”);
else
printf(“0”);
if (arr3 == arr4)
printf(“1”);
else
printf(“0”);
return 0;
}
结果输出为0 1
字符串hello world 存放在常量区,数组变量arr1 ,arr2,指针变量arr3,arr4均存放在栈区
arr1,arr2,需要对字符串分别进行一次拷贝,arr1和arr2为首元素地址,所在的栈区位置不同!
arr3和arr4则均指向字符串首元素的地址,指向的位置为常量区。

指针数组
1.一组存放指针的数组;
如:char arr[10] //其含义为一个数组arr存放了10个char的指针

数组指针
1.指向一个数组的指针变量;大小为4字节
如:char(arr)[10] //arr先与结合,指向一个大小为10的char数组,
//[]优先级高于*,需要加上()让*与arr结合

&数组名 and 数组名
对于数组 int arr[10];
1.&arr代表该数组的地址,该指针类型为int ()[10],大小为4字节;
2.arr为数组首元素地址,该指针类型为int

例:
int main()
{
int arr[10] = { 0 };
printf("%p\n", arr);
printf("%p\n", arr+1);
printf("%p\n", &arr);
printf("%p\n", &arr+1);
}
输出结果:
008FFA14
008FFA18
008FFA14
008FFA3C
结论:
1.数组首元素地址与数组地址相同;
2.arr+1之后加4字节 ,即数组第二个元素地址,类型为int*;
3.&arr+1后加40字节,即第二个数组!指针类型为int(*)[10]的数组指针;

数组参数与指针参数
1.数组传参实际上是将首元素地址传给形参,
对于数组一维数组 int arr[10] = {0};
a:首先可以使用一个指针接收 int arr;
b:还可以使用int arr[] 接收
c:还可以使用int arr[10]接收
但是接收的本质必须为一个指针 即int
的类型;

对于二维数组int arr[3][5] = {0};
a:可以使用int(arr)[5]接收
b:还可以使用int arr[3][5];
c还可以使用Int arr [][5];
二维数组传参的实质是将一个数组指针传给形参即a - int(
)[5];//其首元素地址则为二维数组第一行的元素

指针函数和函数指针

1.指针函数为一个函数,参数为指针 类型为fun(int*)
2.函数指针为指针,其类型为函数类型,代表指向一个函数的指针。 类型例如:void(*p)()
//函数指针的三要素:1.返回值 2.函数参数 3.指向函数的地址。
//分析时应该根据运算符的优先级拆解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值