C语言考点(一)

一、&*和*&还有**&的区别

首先"&"和 "*" 的运算优先级别是相同,都是按自右向左的方向结合。

&:取地址运算符,返回操作数所指的内存地址
*: 间接寻址运算符,返回操作数内存地址的值
*&:&返回操作数的内存地址,*&取操作数内存地址的值
        因此,*&为操作数本身的值

&*:*相当于变量的值,然后再取变量的地址。
**&:**&的操作数只能为指针,&为指针自己的地址,*&为指针所指向的地址
        因此,**&为指针所指向的地址的值


&*p”先进行“ * ”运算," *p "相当于变量a;再进行" & "运算," &*p "就相当于取变量a的地址

" *&a "先进行" & "运算,"  &a "就是取变量a的地址,然后执行"  "运算,"  *&a  "就相当于取变量a所在地址的值,实际就是变量a

#include <stdio.h>
#include <stdlib.h>
void main()
{
	int a;
	int *p;
	p = &a;
	scanf("%d", p);
	printf("&*p = %d\n", &*p);
	printf("*&a = %d\n", *&a);
	printf("*&a = %d\n", **&a); 
} 

二、数组的初始化


(1) 定义数组后必须要初始化,不要认为不初始化,系统就会自动初始化为0;如果不初始化,局部变量在栈上,各数组元素的值将是随机数;
(2) 数组初始化:程序员至少必须把数组元素的第一个数组元素初始化为0,剩余的元素系统会自动初始化为0; 实际上,把数组初始化为0是在编译时完成的。
(3) 初始化值的个数可少于数组元素个数.当初始化值的个数少于数组元素个数时,前面的按序初始化相应值, 后面的初始化为0;
(4) 如果明确指定了数组大小,当在初始化时指定的元素个数超过这个大小就会产生错误. 例如:int array_test[3]={1,2,3,4} 超出了数组元素个数的界限;
(5) 当数组定义时没有指定大小,当初始化采用列表初始化了,那么数组的大小由初始化时列表元素个数决定。
(6) 一般来说 全局变量、静态变量处于数据区,默认初始化为0 (如果指定初始值,则为指定的值)局部数组根据编译器的特点有所不一样。
(7) 静态局部变量和全局变量一样,数据都存放在全局区域,所以在主程序之前,编译器已经为其分配好了内存,在C中,初始化发生在代码执行之前,编译阶段分配好内存之后,
就会进行初始化.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值