c语言指针总结
Posted cuckoo-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言指针总结相关的知识,希望对你有一定的参考价值。
一级指针 :是一个变量,存放内存单元的地址。(存放在指针中的值都被当作地址来处理)
int num = 6;
int* p = #
printf("%p",p);//此时变量p里存放的是num的地址
int num = 6;
int* p = #
printf("%p",p);//此时变量p里存放的是num的地址
指针的运算:
指针+-整数:
int n = 10;
char *pc = (char*)&n;
int *pi = &n;
printf("%p ", &n);//打印变量n的地址
printf("%p ", pc);//打印变量pc中的内容
printf("%p ", pc + 1);//pc被强制类型转换成为char型,则+1跳过1个字节
printf("%p ", pi);//打印变量pi中的内容
printf("%p ", pi + 1);//pi为int 类型指针,则+1跳过4个字节
//总结:指针的类型决定了指针向前或者向后走一步有多大(距离)。
char *pc = (char*)&n;
int *pi = &n;
printf("%p ", &n);//打印变量n的地址
printf("%p ", pc);//打印变量pc中的内容
printf("%p ", pc + 1);//pc被强制类型转换成为char型,则+1跳过1个字节
printf("%p ", pi);//打印变量pi中的内容
printf("%p ", pi + 1);//pi为int 类型指针,则+1跳过4个字节
//总结:指针的类型决定了指针向前或者向后走一步有多大(距离)。
用指针判断电脑的字节序:
int num = 0x11223344;
char* p = (char*)#
printf("%x",*p);//如果输出是11则为大端字节序,44则为小端字节序。
int num = 0x11223344;
char* p = (char*)#
printf("%x",*p);//如果输出是11则为大端字节序,44则为小端字节序。
二级指针:二级指针也是一个变量,只不过它存放的是一个指针的地址。
int a = 10;
int* p = &a;
int** pp = &p;
printf("%p ",&a);//打印a的地址
printf("%p ", p);//打印变量p中的值
printf("%p ", pp);//打印变量pp中的值
int* p = &a;
int** pp = &p;
printf("%p ",&a);//打印a的地址
printf("%p ", p);//打印变量p中的值
printf("%p ", pp);//打印变量pp中的值
指针和数组 :数组名和数组元素的地址是一样的。数组名表示的是数组首元素的地址。
int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
int *p = arr; //指针存放数组首元素的地址
int sz = sizeof(arr)/sizeof(arr[0]);
for (int i = 0; i < sz; i++)
{
printf("&arr[%d] = %p <====> p+%d = %p ", i, &arr[i], i, p + i);
}
int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
int *p = arr; //指针存放数组首元素的地址
int sz = sizeof(arr)/sizeof(arr[0]);
for (int i = 0; i < sz; i++)
{
printf("&arr[%d] = %p <====> p+%d = %p ", i, &arr[i], i, p + i);
}
p+i 其实计算的是数组 arr 下标为i的地址。
指针数组:每一个元素都是指针类型的数组。
int arr[5];
这个数组里存了5个整形类型的指针。
每个元素都是int*
以上是关于c语言指针总结的主要内容,如果未能解决你的问题,请参考以下文章