C语言学习第20篇---指针的本质剖析
【摘要】
知识来源主要是陈正冲老师的《C语言深度解剖》及Delphi Tang老师的《C语言剖析》和《征服C指针》,《C和指针》,有兴趣的朋友可以看我置顶文章获取
*号的意义
在指针声明时,*号表示所声明的变量为指针
在指针使用时,*号表示取指针所指向的内存空间中的值
我将其理解为“钥匙”,如图
&n...
知识来源主要是陈正冲老师的《C语言深度解剖》及Delphi Tang老师的《C语言剖析》和《征服C指针》,《C和指针》,有兴趣的朋友可以看我置顶文章获取
*号的意义
在指针声明时,*号表示所声明的变量为指针
在指针使用时,*号表示取指针所指向的内存空间中的值
我将其理解为“钥匙”,如图
实例1:指针使用
-
#include <stdio.h>
-
-
int main()
-
{
-
int i = 0;
-
int* pI;
-
char* pC;
-
float* pF;
-
-
pI = &i;
-
-
*pI = 10;
-
-
printf("%p, %p, %d\n", pI, &i, i);
-
printf("%d, %d, %p\n", sizeof(int*), sizeof(pI), &pI);
-
printf("%d, %d, %p\n", sizeof(char*), sizeof(pC), &pC);
-
printf("%d, %d, %p\n", sizeof(float*), sizeof(pF), &pF);
-
-
return 0;
-
}
传值调用和传址调用
- 指针是变量,因此可以声明指针参数
- 当一个函数体内部需要改变实参的值,则需要使用指针参数(很多新手容易在这里犯错误)
- 函数调用时实参值将复制到形参
- 指针适用于复杂数据结构作为参数的函数中
实例2:利用指针交换变量
-
#include <stdio.h>
-
-
int swap(int* a, int* b)
-
{
-
int c = *a;
-
-
*a = *b;
-
-
*b = c;
-
}
-
-
int main()
-
{
-
int aa = 1;
-
int bb = 2;
-
-
printf("aa = %d, bb = %d\n", aa, bb);
-
-
swap(&aa, &bb);
-
-
printf("aa = %d, bb = %d\n", aa, bb);
-
-
return 0;
-
}
常量与指针 (这个意思是说怎么分辨是指针还是常量)
方法是:左数右指
当const出现在*号左边时指针指向的数据为常量
当const出现在*后右边时指针本身为常量
实例3:常量与指针分析
-
#include <stdio.h>
-
-
int main()
-
{
-
int i = 0;
-
-
const int* p1 = &i;
-
int const* p2 = &i;
-
int* const p3 = &i;
-
const int* const p4 = &i;
-
-
*p1 = 1; // compile error
-
p1 = NULL; // ok
-
-
*p2 = 2; // compile error
-
p2 = NULL; // ok
-
-
*p3 = 3; // ok
-
p3 = NULL; // compile error
-
-
*p4 = 4; // compile error
-
p4 = NULL; // compile error
-
-
return 0;
-
}
小结:
- 指针是C语言中一种特别的变量
- 指针所保存的值是内存的地址
- 可以通过指针修改内存中的任意地址的内容
文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。
原文链接:allen5g.blog.csdn.net/article/details/80439812
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)