熟悉了C语言和Python中的行优先模式,上手Fortran的列优先模式时候有点绕,大致在这整理下思路。
无论对于C或者Fortran数据对象在内存中都是连续排列的。比如我初始化一个3×3的二维数组.
C语言
1 2 3 4 5
| int c[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
|
Fortran
1 2 3
| integer :: f(3, 3) integer :: r, c data ((m(r, c), r=1, 3), c=1, 3) /(i, i=1,9)/
|
Read More
这几天改以前的代码,每次git push到github的时候总是提醒我输入我输入github的用户名和密码,很是麻烦。
于是找到了原因,之前我的代码是通过https clone到本地的,如果一开始是通过git ssh克隆就不会出现这种问题。如果已经通过https克隆,不用着急可以修改。
在你的版本库.git中打开config文件会有如下一段代码:
1 2 3
| [remote "origin"] fetch = + refs/heads/*:refs/remotes/origin/* url = https://username@github.com/username/projectname.git
|
url改成相应的
1 2 3
| [remote "origin"] fetch = + refs/heads/*:refs/remotes/origin/* url = git@github.com:username/projectname.git
|
这样就可以通过ssh公钥的方式认证进行git push啦
Read More
昨天在操作链表的时候看到书上写了一段释放链表内存的代码,感觉奇奇怪怪的。
1 2 3 4 5 6
| current = head; while(current != NULL) { free(current); current = current->next; }
|
上面的代码就是在释放了current指向的内存之后仍然使用了该内存的数据。感觉好奇怪,不知道是作者的原因还是什么。
应该这样写才对:
1 2 3 4 5 6 7
| current = head; while(current != NULL) { tmp = current->next; free(current); current = tmp; }
|
Read More
今天给结构数组初始化的时候发现也能指定初始化项目列表。于是试了试int数组也可以,在这里把这几种常用的数组初始化方法总结下。
Read More
昨天写了个c语言处理文件的练习题,题目是:
编写一个代开两个文件的程序。可以使用命令行参数或者请求用户输入来获取文件名。让程序打印第一个文件的第一行,第二个文件的第二行,第一个文件第一行,第二个文件第二行。。。以此类推,知道打印完行数较多的文件的最后一行。
程序很短很好写,但是在写程序的过程中我是通过逻辑或来判断是否两个文件都读完。
1 2
| while(fgets(line1, SLEN, fp1) != NULL || fgets(line2, SLEN, fp2) != NULL) {...}
|
可是这样输出的结果是先打印了第一个文件的所有行然后是第二个文件的所有行。
后来想了想,之所以出现这样的结果,有可能是逻辑运算符如果第一个条件满足后就不会运算||
后面的表达式了。
于是我把代码改成如下:
1 2 3 4 5 6 7 8 9
| pt1 = fgets(line1, SLEN, fp1); pt2 = fgets(line2, SLEN, fp2); while(pt1 || pt2) { fputs(line1, stdout); fputs(line2, stdout); pt1 = fgets(line1, SLEN, fp1); pt2 = fgets(line2, SLEN, fp2); }
|
果然是猜测的原因,以后用或运算符的时候要注意这里了。
以上。
Read More