C语言指针运算和指针类型
所属分类 c
浏览量 823
类型 算术运算 单位长度
自增自减
自增自减++ --优先级高于解引用*
*q++ *(q++)
*q-- *(q--)
++*q ++(*q)
--*q --(*q)
如果一个表达式里有多个运算符,先执行优先级高的运算符
如果优先级相同,那就看结合性,根据结合方向来做运算
指针的算术运算表示在一片连续空间上的移动
指针的比较运算也是用于一片连续空间的地址比较
常用于数组等连续内存
无论指向什么类型,所有指针的大小都是一样的
char* str;
short* ps;
int* pn;
long* pl;
long long* pll;
float* pf;
double* pd;
long double* pld;
指向不同类型的指针不能直接相互赋值(void* 除外),需要强制类型转换
指针类型转换没有改变指针的地址,也没有改变指针指向的值,只是改变了移动的单位长度
void* 指向未知类型的指针, 根据需要转换为所需数据类型
#include "stdio.h"
int main(){
int num = 3;
int arr[] = {0,1,2,3,4,5};
char *str = "hello";
int *pnum = #
char *pstr = str;
printf("%p %d\n",pnum,*pnum);
int *parr = arr;
void *p1 = str;
void *p2 = pnum;
int *pnum2 = (int*)p2;
printf("%p %d \n",pnum2,*pnum2);
printf("%p %p %p\n",str,pnum,arr);
printf("%ld %ld %ld %ld \n",sizeof(str),sizeof(pnum),sizeof(pstr),sizeof(p1));
printf("%p %p\n",p1,p2);
p1++;
p2++;
printf("%p %p\n",p1,p2);
printf("%p %p\n",pstr,pnum);
pstr++;
pnum++;
printf("%p %p\n",pstr,pnum);
int*parr1 = &arr[1];
int*parr3 = &arr[3];
// 2
printf("%ld\n",(parr3 - parr1));
return 0;
}
上一篇
下一篇
c 指针数组
二维数组函数入参用法
二维整型数组参数传递的三种方式
C语言指针和二维数组
各种指针的大小
C语言数据结构笔记