java二维数组行列互换-:数组元素个数与前面的格式
int arr[10]; 前面是数据类型,10表示数组元素个数;
arr[2]; 与前面的格式相比,前面没有数据类型java二维数组行列互换,数字2表示数组序列数。
int *p; 符号*表示声明一个指针(前面有数据类型);
int ivar = 5;
p = &ivar; 符号&表示解地址;
int &rvar = ivar 符号&表示引用类型;
*p = 15; *表示指针指向内容的引用;(前面无数据类型)
2 自增与自减运算符
自增与自减运算符,如果是前置,则会先改变运算符后变量的值,再赋值给给左值。
int ivar =10;
in jvar = ++ivar;
运算的顺序是,ivar = ivar++,jvar = ivar;
int ivar =10;
in jvar = ivar++;
运算的顺序是,jvar = ivar + 1;
可以理解为符号在上下文中的不同。
m=i++等价于:m=i,;i=i+1;
m=++i等价于:i=i+1;m=i;
3 static运算符
static定义的变量j为静态变量,因为位于代码块内,所以也是局部的,所以属于局部静态变量。编译时赋初期,无论函数调用多少次只赋值一次。虽然是局部变量,因为static的静态声明,函数调用结束后与自动变量不同的是,空间不释放,值不消失,变量值保留到下次函数调用,调用时的值为下次函数调用结束时的值。当然,因为变量定义在块内,虽然函数调用结束后其值仍存在,但其他函数不能使用其值,即变量的作用域只能是当前函数。
全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。未冠static的全局变量和静态的全局变量二者都是静态存储方式,在单文件程序中二者无任何区别。区别在于当一个源程序由多个源文件组成时,非静态的全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的,而静态的全局变量则限制了作用域,即只在定义该变量的源文件内有效,在同一源程序的其他源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内java二维数组行列互换,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。从以上分析可以看出,把局部变量增加静态声明后是改变了它的存储生存期。把全局变量增加静态声明后是限制了它的使用范围(作用域)。因此static这个说明符在不同的的地方所起的作用是不同,应该是语言开发者为避免使用更多的关键字而增加一些关键字在不同的上下文环境中的功能。
4 星号*的八种用法
乘法运算符
复合赋值运算符
假读符
注释符
指针定义符
指向运算符
行列地址转换符
地址值符
4.1 乘法运算
c=a*b;
a=2, b=3, c=2*3=6;
4.2 复合赋值运算符
i=5; i*=7;
将运算符*=左边变量的值与右边操作数相乘,结果i=35;
4.3 假读符
mian(){
int i, j;
scanf(“%3d%*3d%3d”, &i, &j);
printf(“i=%3d, j=%3d\n”, i, j);
}
运行程序输出结果为:i=123, j=789; 中间数字被跳过,称为假读或空读;
4.4 注释符
c=a*b; /* 用于注释 */
4.5 指针定义符
int *i, *j; //定义两个指针变量i和j;
max(int *i, int *j) //首部定义2个形参i和j也是指针变量;
int(*p)(); //定义一个指向函数的指针变量p,用来保存函数的入口地址;
char *string = “Hello world!”; //定义一个字符型指针变量string,用来保存字符串常量的首地址;
typedef char *STRING; //定义一个字符指针类型 STRING;
4.6 指向运算符
int a=100;
int *p_a =& a ; // p_a指向了a;
4.7 行列地址转换符
二维数组a[i][j]的数组名a前加上*使行地址转换为列地址;
例:
a+i为第i行行地址,则*(a+i)为第i行第0列的列地址;
*(a+i)+j为第i行第j列的列地址;
* ( * (a+i)+j)中的第一个*是指向运算符,指向第i行第j列所在单元,等价于a[i][j];
outuput:2 3 4 5 6 7 8 9
4.8 地址值符
函数名前的*号,表示函数返回一个地址值。
int * locate(int *p, int num);
-End-