我是数据库新手,已经完成了有关理论部分的基本“作业”,并开始通过 MySQL Workbench 使用 MySQL Server。
我创建了四个出现在 Workbench 主屏幕仪表板上的“连接”,并且还创建了一些表格。但是当我通过任何连接登录(使用用户名和密码)时,我可以看到我创建的所有表。那么谁能告诉我多个连接背后的意义是什么?MySQL Workbench 中的“连接”到底是什么?
我尝试用谷歌搜索它,在 StackOverflow 上搜索它,甚至参考 MySQL Workbench 的用户手册,但没有得到答案。
根据我的理解,每个被调用的函数在程序堆栈中都有一些分配给它的内存,即使同一个函数递归调用自身(即每个调用在程序堆栈中都有自己的内存),这也是正确的.请回答以下两个问题:
如果变量在函数中声明为static,那么同一个变量/同一个副本是否会用于该函数的所有递归调用?
如果变量未声明为static(例如,简单地称为"int x"),那么对函数的每个递归调用是否都有自己的变量副本?如果是,那是从其他函数调用函数时通常会发生的方式,包括递归调用吗?
#include<stdio.h>
#include<stdlib.h>
int main()
{
static int x=0;
x++;
printf("Team %d\n",x);
if(x<10)
main();
else
exit;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Team 1
Team 2
Team 3
Team 4
Team 5
Team 6
Team 7
Team 8
Team 9
Team 10
Run Code Online (Sandbox Code Playgroud) 为什么以下程序没有按预期打印新创建的文本文件("E")的第一个字符?这是一个简单的程序,我试图从各个方面看问题,但找不到原因.文本文件正在我的D盘上创建,内容为" EFGHI ",但由于某种原因,即使我使用倒带和读取并且输出为-1,也不会读取"E".getc()
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x;
FILE *fp;
fp=fopen("F:\\demo.txt","w");
if(fp==NULL)
puts("Write error");
fputs("EFGHI",fp);
rewind(fp);
x=getc(fp);
printf("%d",x);
fclose(fp);
}
Run Code Online (Sandbox Code Playgroud)
更新:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x;
FILE *fp;
fp=fopen("F:\\demo.txt","w+");
if(fp==NULL)
{
puts("Write error");
exit(EXIT_SUCCESS);
}
fputs("EFGHI",fp);
rewind(fp);
while(!feof(fp))
{
x=getc(fp);
printf("%d\n",x);
}
fclose(fp);
}
Run Code Online (Sandbox Code Playgroud) 据我所知,C中的对象有3种类型的链接:1)外部2)内部和3)无,并且在块范围内声明的对象,如在函数体内,没有链接,除非前面有关键字"extern"或"静态".
但是为什么然后下面的函数声明能够链接到main()函数下面的定义,即使我在声明期间没有使用"extern"?请解释一下,因为它完全颠覆了我对这个主题的理解.谢谢.
#include<stdio.h>
int main()
{
int foo(); //working even though I've not used "extern"
printf("%d",foo());
}
int foo()
{
return 8;
}
Run Code Online (Sandbox Code Playgroud)
上述计划的结果:8
我认为以下程序没有任何问题,并且不可移植性让我感到非常困惑。根据 Mike Banahan 的书(GBdirect C Book,第 2.4.2 节),以下程序是不可移植的。给出的理由是:
也许是另一个例子。如果您的实现连续存储其字符,这将打印出整个小写字母表,或者如果不是连续存储的,则打印出更有趣的东西。C 对内部形式中字符的顺序没有做出太多保证,因此该程序产生不可移植的结果!
那么,简单来说,你能解释一下下面的程序有什么问题吗?无论实现如何,字符的 ASCII 值是否都相同?我的意思是,“a”的值始终为 97,“b”的值始终为 98;那么为什么通过添加 1 来获得后者是不可移植的呢?
#include <stdio.h>
#include <stdlib.h>
main(){
char c;
c = 'a';
while(c <= 'z'){
printf("value %d char %c\n", c, c);
c = c+1;
}
exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud) 它完全忽略了我怎么能printf("Hello")
永远打印Cello
.它挑战了我对C的基本理解.但是从最重要的答案(由Carson Myers撰写)关于Stack Overflow的以下问题,它似乎是可能的.你能用简单的语言解释一下它有什么可能吗?这是答案所说的:
每当你在你的源写一个字符串,该字符串是只读的(否则你将可能改变可执行文件的行为 - 想象一下,如果你写的char*A ="你好";然后将a [0]到"C ."然后,别的地方写的printf('你好’);.如果你被允许改变'你好’,你的编译器只存储一次(应该),那么的printf('你好’)的第一个字符;将输出大提琴!)
上述问题:是否可以修改C中的字符串?
为什么第一个程序不起作用,但第二个程序不起作用?我的意思是,第二个程序给出了错误
"'之前的预期表达';'"
但是为什么然后它不会给"for(; i <= 10; i ++)"同样的东西,因为第一个表达式也缺失了?不是";;" 在第二个程序的"for(i = 0; i <= 10 ;;)"中表示空白表达式?最后,为什么"for(i = 0; i <= 10;)"在删除第二个分号后才起作用?
//Program 1
#include<stdio.h>
int main()
{
int i=1;
for(;i<=10;i++)
{
printf("%d\n",i);
}
}
//Program 2
#include<stdio.h>
int main()
{
int i;
//for(i=1;i<=10;) // This works but following doesn't
for(i=1;i<=10;;)
{
printf("%d\n",i);
i++;
}
}
Run Code Online (Sandbox Code Playgroud) c ×6
ascii ×1
char ×1
declaration ×1
expression ×1
extern ×1
filestream ×1
for-loop ×1
function ×1
getc ×1
linkage ×1
mysql ×1
portability ×1
recursion ×1
rewind ×1
static ×1
string ×1
text-files ×1