以下代码操作指向同一位置的指针; 我很困惑为什么当我运行代码时,输出没有显示值重合.
#include "stdio.h"
main()
{
int i=3,*x;
float j=1.5,*y;
char k='c',*z;
x=&i;
y=&j;
z=&k;
printf("\nAddress of x= %u",x);
printf("\nAddress of y= %u",y);
printf("\nAddress of z= %u",z);
x++;
y++;y++;y++;y++;
z++;
printf("\nNew Address of x= %u",x);
printf("\nNew Address of y= %u",y);
printf("\nNew Address of z= %u",z);
printf("\nNew Value of i= %d",i);
printf("\nNew Value of j= %f",j);
printf("\nNew Value of k= %c\n",k);
}
Run Code Online (Sandbox Code Playgroud)
输出:
地址x = 3219901868
地址y = 3219901860
地址z = 3219901875
新地址x = 3219901872
新地址y = 3219901876
新地址z = 3219901876 …
我是初级到中级程序员,我学过一些java和C#.我想开始考虑制作一些我可以向世界发布的简单程序.只是一些基本的东西,如日历软件,可能是免费的.用户希望安装过程快速简便.要安装java程序,我必须告诉他们安装java.要安装C#程序,我必须告诉他们安装了.NET.我担心这可能会推迟一些潜在的用户,他们只想双击一个exe文件,选择一个目录并完成大量工作.
所以,我想这是一个或两个部分的问题:
1)是否有一种编程语言可以更轻松地设置安装程序而无需用户安装其他东西?
要么:
2)是否有某种方式来设置,检查系统,看看它和Java/.NET /任何一个安装程序,然后包含Java/.NET /无论在安装,如果它尚不存在?
如果int var = 20则如何
printf("%d %d %d", var--, ++var, --var);
Run Code Online (Sandbox Code Playgroud)
执行发生在C编程语言中.
C++是一种面向价值的语言,似乎不支持OO(因此也就是子类型多态).对于参数多态,缺乏类型参数的类型推断和模板的详细语法使得它们难以使用.
请注意,我所熟知的唯一语言是Java(子类型多态)和Haskell(参数多态).两种语言都倾向于一种多态性.然而,C++支持(在某种程度上),但两者似乎都在我认为不直观的问题上工作.因此,当使用C++进行编程时,我很难确定应该采用何种方式编写代码.
所以我的问题是在C++中哪种多态被认为更惯用?
编辑1:
解释我的"C++不支持OO"点:
动态方法调度和LSP在OO中很常见,不是吗?但是当谈到C++时,不使用指针(原始或智能)来应用这些技术是不可能的(或实际的).
例如,考虑一个Person带有virtual方法的类,该方法print将其名称输出到控制台.让另一个课程Student延伸Person并覆盖,print以打印他的名字加上他学校的名字.
现在考虑以下功能:
void blah(const Person & p) {
p.print();
}
Run Code Online (Sandbox Code Playgroud)
在这里,如果我传递一个Student对象,print方法将调用print从Person,不从Student.因此,它违背了亚型多态性的基本思想.
现在我知道在这种情况下我可以使用动态分配(即指针)来实现子类型多态.但是静态分配在C++中更常见.指针用作最后的手段(我记得在这里读过其他一些帖子).所以我觉得很难调和推荐静态分配而不是动态分配的好实践(这就是我说C++是值时的意思具有亚型多态性的.)
当使用Java时,我倾向于全面使用动态分配,因此子类型多态性在那里很自然.但是,C++并非如此,
希望我的观点现在清楚了.
编辑2:
好吧,我在编辑1中给出的例子是错误的.但我的观点仍然有效,我已多次面对这个问题.我无法回忆起我头脑中的所有这些案例.
这是我想到的一个案例.
在Java中,您可以在类中引用超类型,然后使它们指向任何子类型的实例.
例如,
class A {
B y1;
B y2;
}
abstract class B {
// yada yada
}
class B1 exyends B {
// yada yada
}
class B2 extends B {
// …Run Code Online (Sandbox Code Playgroud) 我今天正在阅读一些代码(C,如果它对任何人有所影响),并对开关块感到好奇.
switch (c_type) {
case -1:
some_function(some_var);
break;
[...]
default:
abort();
}
Run Code Online (Sandbox Code Playgroud)
现在,这是一个非常简单的开关块.这是 - some_function(some_var)我很好奇:如果你,程序员,绝对的,积极的,超级的,确保调用会导致进程退出,你是否仍然将break-statement放在下面,即使它完全没必要?你会说这是最好的做法吗?
我已经学习了几个月的编程,主要是java和C#.从我有限的知识来看,它们看起来很相似,所以我试图理解对实际差异的理解.经验丰富的程序员可以告诉我哪种编程语言更适合哪种工作?
在什么情况下你会说"要创建这种软件,java比C#更合适"或"要创建这种软件,C#比java更合适"?
我正在尝试运行这个程序时遇到一些问题我正在研究......要求说我不允许使用排序功能......我自己做了些事......等等.
差不多,程序编译但执行后挂起......我猜它被卡在无限循环中...但我似乎无法找到它...... :(
该程序读取已经被最少订购的数据文件并将它们(有序)合并到第三个.txt文件中......
这两个文件是Data1.txt,Data2.txt包含:
DATA1.TXT
2
2
2
2
Run Code Online (Sandbox Code Playgroud)
Data2.txt
1
3
5
7
9
Run Code Online (Sandbox Code Playgroud)
combine.c
#include <stdio.h>
#include <stdlib.h>
void sortData(FILE *fpData1, FILE *fpData2)
{
int n, m;
FILE *fpMerge;
fpMerge = fopen("Merge.txt", "w+");
fscanf(fpData2, "%i", &n);
fscanf(fpData1, "%i", &m);
while(n != EOF || m != EOF)
{
if(n == EOF)
{
fscanf(fpData1, "%i", &m);
while(m != EOF)
{
fprintf(fpMerge, "%i\n", m);
fscanf(fpData1, "%i", &m);
}
}
if(m == EOF)
{
fscanf(fpData2, "%i", &n);
while(n != EOF)
{ …Run Code Online (Sandbox Code Playgroud) 最近,我一直在修补自己的语言,并阅读有关该主题的各种着作.
有没有人对C(或汇编程序)如何将概念Object Class和/或概念Generics编程成语言有任何好的建议.(指的是Object和Generics的Java实现)
例如,在Java中,所有类都扩展了Object.那么你如何在C级代表这一点呢?是这样的:
#include <stdio.h>
typedef struct {
int stuff;
} Object;
typedef struct {
int stuff;
Object object;
} ChildClass;
int main() {
ChildClass childClass;
childClass.stuff = 100;
childClass.object.stuff = 200;
printf("%d\n", childClass.stuff);
printf("%d\n", childClass.object.stuff);
}
Run Code Online (Sandbox Code Playgroud)
而且我甚至不确定如何开始实现像Generics这样的东西.我也很欣赏有关程序语言设计的任何有价值的链接.谢谢,
模数运算符有哪些用途?我知道它会计算除法中的余数,所以我真的在问剩余部分有什么用途?
到目前为止,我已经用它来检查一个数字是否是表格中的偶数和替代颜色.
关于掌握新编程语言对先前学习的编程语言的影响,是否有任何科学研究(和结论)?如果掌握各种语言会降低平均生产力,我特别感兴趣.