网站管理系统是什么,seo优化的主要任务包括,丽水网站建设费用,网站后台更新文档本文章对C指针的使用做一个全面的阐述与解释
1.1指针的定义使用
指针#xff1a; 通过指针间接访问内存 指针就是地址 看下面代码#xff1a;
#includeiostream
using namespace std;
int main(){//1、定义指针int * p;int a 10;//2、使用指针p a;cout…本文章对C指针的使用做一个全面的阐述与解释
1.1指针的定义使用
指针 通过指针间接访问内存 指针就是地址 看下面代码
#includeiostream
using namespace std;
int main(){//1、定义指针int * p;int a 10;//2、使用指针p a;couta的地址为 aendl;coutp的值为 pendl;cout*p的值为 *pendl;return 0;
}
~ 上述代码利用取地址运算符得到a的地址并打印p的值二者结果相等因此pap就代表了a的地址再通过解引用的方式来找到指针指向的内存*p 因此之后可以通过操作 *p而间接操作a也就是说改变 *p的值a的值也会随之改变。
1.2指针所占内存空间
虽然指针指向的是内存地址但指针本身需要地址去存储但类型特殊用多大内存去存储呢 公认下在32位操作系统下占用4个字节空间64位下占8个字节空间。大部分都是32位因此该情况位默认。 C中利用sizeof()函数查询数据类型占多大空间如下 cout---------------------------endl;coutsizeof(p) sizeof(p)endl;coutsizeof(int *) sizeof(int*)endl;coutsizeof(*p) sizeof(*p)endl;coutsizeof(int) sizeof(int)endl;coutsizeof(float) sizeof(float)endl;p是int类型的数据结果得目前是64位操作系统指针占8个字节空间。 顺便看了看p此时与int类型相同证明了第一节中说的 * p 代表a的说法。对于64位操作系统无论什么类型指针都占8个字节内存char* ;double*;float*;int*
1.3 空指针和野指针
空指针 指针变量指向内存中编号为0的空间 用于指针的初始化空指针指向的内存是不能访问的 0-255是系统内存不允许访问
**野指针 ** 指针变量指向非法的内存空间 指针指向了一片没有开辟的内存。语法没有错误但无法运行。
所以空指针和野指针都不是我们申请的内存因此不要访问
1.4 const修饰指针
1.常量指针 ------ const int *p a 指针的指向可以修改但指针指向的值不可以修改 即p现在指向a的地址现在可以将p指向另一个变量地址这个操作允许但p指向a的地址a的值不允许更改
2.指针常量 -----int *const p a 指针的指向不可以修改但指针指向的值可以修改 即p现在指向a的地址现在可以修改a的值这个操作允许但不可以将p的指向修改即指向别的指针
3.const即修饰指针又修饰常量 ----const int* const p a; 指针的指向不可以修改指针指向的值也不可以修改
1.5 指针和数组
这里说的是数组名代表得就是数组首地址而指针p指向的也是地址因此可以将指针直接指向数组表示数组的第一个值
int arr[] {1,2,3,4,5,6,7,8,9,10};
int *p arr;
cout*pendl;
//结果是1p;
//表示指针向后移动四个字节
cout*pendl;
//结果是2
1.6 指针和函数
函数参数传递如果是值传递函数内部修改不会影响主函数的参数值如果想要在函数内部修改影响到外面主函数中的参数值就要给函数传递参数的地址之后函数参数类型为指针表示用指针去接受传入的地址然后指针解引用访问参数值因为直接访问的是地址因此主函数值也会改变