关于指针和数组的重新理解
来源:互联网 发布:2015中国加工贸易数据 编辑:程序博客网 时间:2024/05/24 22:42
指针是一个变量,变量的内容是指向的另外一个变量的地址。当然指针本身也有自己的地址,是4个字节的大小空间,我们可以通过sizeof(char*)或sizeof(int*)来检验。
对指针变量的操作,实质是对它指向的内容的操作,因为你无法通过指针指向的变量来找到引用该变量的指针。虽然这个对新手来说很难理解。我是在多次调试和编写代码之后才理解的,当然之前也因为调试结果的问题出了一些错误。因为指针是单个方向的(个人理解),这很容易理解的,一个变量可以由多个指针同时指向即引用,但通过该变量找到是谁引用的就不是c语句可以表达的了。
指向的作用是持续的,一旦指向的内容被释放掉了,那指针指向的变量就为空了,这个从指针作为参数传递形参就能很好的看到。也正因为如此,我们引用了二次指针或更多次的指针。通过指针自身地址的引用,作为参数,可以实现对指针变量本身的操作,而如果仅对指针变量进行操作,那对指针本身是没有什么影响的,因为他的指向没有变。举例吧。
int main()
{
const char* p = “”1234;
int a = int2num("45678afdas",p);
printf("%d,&p=%s",a,p);
return 0;
}
int int2num(const char* s,const char*q)
{
int r =0;
while(isdigit(*s))
{
r=r*10+*s;s++;
}
q=s;
return r;
}
查看一下你的结果:45678,&p=1234
为什么呢,可以通过输出变量和指针本身的地址查看一下:可以看到,指针变量p本身的地址与传递的形参q本身的地址并不一样,对指针的操作其实是使用的指针的一个副本,所以,把p指针指向的变量地址传递给了q,让q去重新指向了这个变量的地址,之后对q所有的操作都发生在q身上,给q再赋值和p没有任何关系了,除非你修改了p所指向的那个变量,不过这里是不可能的,因为他是个常量,在常量存储区中是不容许修改的。所以p的内容始终不会变。
如果这样修改就大不一样了:我传递参数时加上一个&,即&p,而不是p,那传递的就是p自身的地址,所以对q的操作其实也就是对p进行操作,这里不是对指针的副本进行操作,而是对指针本身进行操作了。如果一旦有q指向的内容释放掉了,那p也变为空了。因为他实际上还是一个指向,指向的内容不存在了,他自己也没了价值。
修改为如下:
nt main()
{
const char* p = “”1234;
int a = int2num("45678afdas",&p);
printf("%d,&p=%s",a,p);
return 0;
}
int int2num(const char* s,const char**q)
{
int r =0;
while(isdigit(*s))
{
r=r*10+*s;s++;
}
*q=s;
return r;
}
结果很明显了。总结:指针只是一个指向,如果要实现对变量的重新赋值,要用引用,找到该变量。通过指向的内容,是找不到指针变量的。
数组:数组虽然也有地址的含义,可他跟指针不同,他有自己的存储空间。给他赋上值之后,只要数组不释放,其内容不会因为其他跟他相关变量的释放而修改。
- 关于指针和数组的重新理解
- 关于数组和指针的一些理解
- 关于指针数组、数组指针、及函数指针和指向函数指针数组的指针的一点理解
- 数组指针和指针数组的理解
- 关于二维数组和二维指针的理解总结
- 关于二维数组和二级指针的理解
- 数组和指针的理解
- 指针和数组的理解
- 关于数组与指针的理解
- 关于二维数组的指针理解
- 关于指针的指针和二维数组
- 关于数组指针,指针数组,双重数组,二维矩阵,字符串数组,双重字符指针的理解
- 理解数组指针和指针数组的区别
- C语言:数组指针和数组指针的理解
- 数组和指针的一些理解
- 对于数组和指针的理解
- 对数组和指针的基础理解
- 理解指针和数组的关系
- Java和Android学习中的一些资源(网络搜集)
- C-DOCSIS安全性
- js前往锚点
- 通用 Java 文件上传和下载组件的设计与实现
- MTK NVRAM各种属性的具体解释
- 关于指针和数组的重新理解
- Spring和Struts2整合见问题之一
- Oracle listener
- 亿能第二期测试沙龙-《企业自动化测试专题研讨会》4月中旬举行
- 使用eclipse将android2.3 phone源码导入并编译的方法
- 基于uIP的web服务器中的cookie处理
- Visio Studio中的resource.h文件.rc资源
- iis 上不能下載 .exe dll com 文件提示404找不到頁面
- 年/月/日 时:分:秒 --> 年月日时分秒