C语言这两道题加了static跟没加的有什么区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言这两道题加了static跟没加的有什么区别?相关的知识,希望对你有一定的参考价值。
C语言这两道题加了static跟没加的有啥区别?感觉没什么区别啊
c语言中static关键字有两个作用,一是文件作用域,二是函数作用域。一、文件作用域
文件作用域关键字static的作用是,以static申明的全局变量、函数不得被其他文件所引用,例如:
//这是mystr.c文件的内容
#include
static int num = 10;
int mynum = 100;
static int str_len(char *str)
return strlen(str);
int mystr_len(char *str)
return str_len(str) + num;
当你mystr.c文件中的str_len函数加上了static关键字,你便不能在其他的地方复用这个函数,譬如,你不能这样写:
//这是main.c 的内容
#include
int main()
int len;
len = str_len("hello, world\\n");
printf("%d %d\\n", num, len )
return 0;
gcc main.c mystr_len.c
将不能编译通过,因为mystr.c中的num变量和str_len函数都用了static关键字,导致他们只能在mystr.c中被使用,如文件中的mystr_len函数可以引用num变量和str_len函数。
//这是main.c 的内容
#include
int main()
int len;
len = mystr_len("hello, world\\n");
printf("%d %d\\n", my_num, len )
return 0;
当不用static关键字时,等同于extern,即
int mystr_len(char *str)
return str_len(str) + num;
和
extern int mystr_len(char *str)
return str_len(str) + num;
是一样的。
二、函数作用域
static另外一个用途是函数内部静态变量,最常用的情况是
int *test()
int num = 100;
int *ptr = #
return ptr;
int main()
printf("%d\\n", *test);
return 0;
该函数返回整数num的指针,在main函数中打印*test将会出现段错误,因为num做为test函数内部,只能在test内部被访问。以下程序是正确的。
int *test()
static int num = 100;
int *ptr = #
return ptr;
int main()
printf("%d\\n", *test);
return 0;
该程序中num变量加了关键字static,函数运行结束后,依然可以在其他地方被引用,只是不能直接通过变量名访问,而要间接通过指针访问,原因是 static变量存储在全局数据段中而不是函数栈中。读者可以将它看作特殊的全局变量,只是其他地方只能通过指针来访问,而不能直接通过变量名访问。 参考技术A 加了static的那个运行结果是34,不加的那个也是34
Oracle字段别名加as与不加的区别
如题 字段别名可以用 select t.name username或者select t.name as username表示 这有什么区别呢?
as加了以后可以定义字段别名,不加as无法命名别名。操作方法如下:
1、首先在oracle中as的作用主要是为表中的字段添加别名,如下图。
2、在命名别名的时候也可以区分大小写,不过要加双引号"",如果不加双引号只是首字母大写的话,在查询结果的时候会全部被替换成大写。
3、如果定义的别名为多个字符,如果不加双引号在语法上会报错误。
4、在使用as为列定义别名的时候,as关键字是可以省略的。
5、最后也可以通过as关键字定义中文别名,不过为了规范一般不经常使用中文别名。
参考技术Aas加了以后可以定义字段别名,不加as无法命名别名。
例如:
SELECT A AS 我是别名,B from 表A字段加了as后,为别名“我是别名"
B字段不加as,则还是叫B,没有别名。
补充:
oracle中as是命名别名使用。
参考技术B as是给现有的字段名另指定一个别名的意思,比如:select username as 用户名,password as 密码 from users
当字段名是英文或拼音缩写时,采用汉字替代之后可以给阅读带来方便
不加as加一个空格然后再加别名也可以,这是一种简略写法。本回答被提问者采纳 参考技术C 加 as 是为了 支持标准的 SQL 语法,不加as 是Oracle 语法的简练,不需要多余的废话,2者没有任何区别 参考技术D 列别名,as可加,可不加
以上是关于C语言这两道题加了static跟没加的有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章