首页
社区
课程
招聘
[分享]C语言基础五-指针
发表于: 2021-5-12 17:55 4458

[分享]C语言基础五-指针

2021-5-12 17:55
4458

指针的含义包含三个方面:变量、地址、内存宽度:

在定义指针的时候,*和类型结合,表示指针的类型; 在使用指针的时候,*和指针结合,表示解引用。

可以让指针指向某个变量的地址,也可以让指针指向一个分配的内存或者字符串常量,还可以指向NULL。

定义一个指针,指针类型的变量长度为4或者8,即sizeof(p)= 4or8,指针所指类型的长度为sizeof(*p)。
void*类型的指针变量,没有指定内存的宽度,其他类型指针隐式转换成该类型,不能用*p解引用取值,需要先转换成特定类型再取值。对于指针变量void* p:

char*类型的指针变量,既可以指向字符,也可以指向字符串,即字符串首个字符的地址。字符指针初始化时,字符使用单引号,字符串使用双引号。

指针支持加减运算,不支持其他算术运算。对于指针p,指针的加法运算p+n,p向后移动的距离不是n个字节,而是n个指针所指类型的单位长度,即nsizeof(p),减法运算与此类似。

数组名是一个常量指针,指向数组的首地址,指针和数组名可以互相通用。

如果指针做实参,那么传实参的指针就必须使用二级指针,要在函数中改变指针的值,就必须传指针的指针。

指针在声明的时候必须初始化,如果没有初始化,任何指针变量在被创建的时候,不会自动成为NULL指针,会随机的指向任何一个地址,它的缺省值是随机的,即野指针,访问野指针会造成不可预知的后果。

int nNum = 1;
int* pNumA = &nNum;
int* pNumB = NULL;
pNumB = (int*)malloc(sizeof(int));
char* szTest = "testString";
char* szBuf = szTest;
int nNum = 1;
int* pNumA = &nNum;
int* pNumB = NULL;
pNumB = (int*)malloc(sizeof(int));
char* szTest = "testString";
char* szBuf = szTest;
int nNum = 1;
int* pNum = &nNUM;
void* p = pNum;
printf("%d",*(int*)p);
char* szBufA = 'p';
char* szBufB = "test";
int nNum = 1;
int* pNum = &nNUM;
void* p = pNum;
printf("%d",*(int*)p);
char* szBufA = 'p';
char* szBufB = "test";
int nArray[3] = {1,2,3};
//第i个元素
printf("%d\n",a[i]);
printf("%d\n",*(a+i));
//第i个元素的地址
printf("%p\n",&a[i]);
printf("%p\n",a+i);
int nArray[3] = {1,2,3};
//第i个元素
printf("%d\n",a[i]);
printf("%d\n",*(a+i));
//第i个元素的地址
printf("%p\n",&a[i]);
printf("%p\n",a+i);
//常量指针,p是一个常量指针,不能修改,指向的内存可以修改
int* const p;
//指针常量,p是一个指针,指向的内存是常量,不能修改,p本身可以修改
const int* p;
//p是一个常量指针,指向的内存也是常量,都不能修改
const int* const p;
//常量指针,p是一个常量指针,不能修改,指向的内存可以修改
int* const p;
//指针常量,p是一个指针,指向的内存是常量,不能修改,p本身可以修改
const int* p;
//p是一个常量指针,指向的内存也是常量,都不能修改
const int* const p;
//指针数组,存放10个指针的数组
int* a[10];
//数组指针,存放的是地址,指向另一个指针,有10个元素的数组的首地址
int(*a)[10];
//指针数组,存放10个指针的数组
int* a[10];
//数组指针,存放的是地址,指向另一个指针,有10个元素的数组的首地址
int(*a)[10];
//为指针分配堆内存
char *p = (char*)malloc(128);
if(p==NULL)
{
    return 1;
}
//为指针分配堆内存
char *p = (char*)malloc(128);
if(p==NULL)
{
    return 1;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//