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关键字定义中文别名,不过为了规范一般不经常使用中文别名。

参考技术A

as加了以后可以定义字段别名,不加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跟没加的有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

C#中static关键字的作用

跪求C语言大神!!两道题。!!

关于Python字典的两道题目

c语言中的boolean 和其他语言的有啥区别?

积木大赛&PLA-Postering

c++编译thread程序时加了<thread>但他就是给我报错说没加,我装了个mingw-w64也不行,咋回事?