网站建设美工的职位要求,邢台手机网站建设费用,网站专题模板,网站职业技术培训学校该楼层疑似违规已被系统折叠 隐藏此楼查看此楼int a10;以上一句话对变量a进行了声明#xff0c;定义以及初始化extern int a;以上一句话仅仅对变量a进行了声明#xff0c;将a的链接属性设置为externalint *p;以上定义了一个指针int a10;int *p;pa;以上为指针变量进行了赋…该楼层疑似违规已被系统折叠 隐藏此楼查看此楼int a10;以上一句话对变量a进行了声明定义以及初始化extern int a;以上一句话仅仅对变量a进行了声明将a的链接属性设置为externalint *p;以上定义了一个指针int a10;int *p;pa;以上为指针变量进行了赋值说明首先*操作符被称为“间接访问操作符”也叫“解引用操作符”他的作用很简单就是对它的右操作数进行解引用这么说吧间接访问操作符的右操作数是一个地址不过这里的地址只是相当于一个字符串并没有真正的在计算机内存中标识一个位置只有对这个操作数进行解引用才能真正定位到计算机的内存中相应的地址上;接下来是操作符这个被称作“取地址操作符”首先要明确指针变量中存储的不是一个具体的数值他存储的是一个地址“字符串”pa,是将a的地址放入到p这个指针变量中补充一句在C语言中指针变量一般占有4个字节的内存int *p12;以上表达式是错误的千万不要在实际编程中进行使用可能有些编译器不会报错但不代表所有编译器不报错但即使不报错也不要这么使用说明首先该表达式给绝大多数初学者的印象是给指针p所指向的内存位置赋上值12但是我们要注意了这里仅仅是对指针变量进行了声明以及定义也就是说编译器仅仅在内存中替指针变量p分配了4个字节的内存而并没有位指针变量p所指向的位置分配内存也就是说int *p12这个表达式的意义是未明确的因为12这个值得具体存放位置编译器并不知道笔者检测过在MinGW(gcc在windows下的移植工具集)中这样写仅仅是报“警告”但这样写是错误的所以绝对不要这么写int a12;int (int *)1000a;以上是为常量指针进行初始化但是在C编程中我们可以说是绝无可能遇到这种情况因为C语言中内存的分配并不是固定的int a100;int *pa;*p;看到以上表达式很多初学者就要困惑了因为前缀自增操作符的优先级要高于间接访问操作符的优先级那对于*p;这个表达式而言是不是就应该后执行间接访问操作符呢这里笔者纠正一下如果是两个操作符同时具有相应的操作数那么就遵循操作符的优先级来进行运算但是这里的*p;这样的表达式我们看到只有一个操作数而间接访问操作符和前缀自增操作符都是自右右左的结合性所以这里先执行自增操作也就是将指针变量p所存储的地址加1之后再进行解引用定位到具体的内存中这里假设自增前p的地址是201那么自增后再解引用就会定位到202这个内存上int a100;int *pa;*p;看了上面的解说后一般的初学者看了*p;这样的表达式大概会兴奋的说这里必然是后缀自增先执行哈哈哈笔者在这里要大笑三声然后自罚三杯因为笔者以上并没有说清自增的特性现在这里说说后缀自增吧在*p;中后缀自增操作符会优先产生p的一个副本然后解引用操作符会作用到这个副本上并返回值这之后自增运算符才会在原有的p上执行加1的操作我们再来说一说*p;这个表达式首先前缀自增会优先在p上执行加1的操作然后产生一个p的副本最后解引用操作符会对增1过后的副本进行解引用从而得到相应位置的值