出于某种原因,我想给struct成员中的双指针赋值。我有一个结构,有3个成员,第一个是int,第二个是指向int的指针,第三个是双指针,指向第二个成员(指向指针)。第三个成员也不知道如何定义。以下是源代码:
#include <iostream.h>
typedef struct {
int a;
int *b;
int **c;
} st;
st st1, *st2 = &st1;
void main(){
// first define a member
st1.a = 200;
// second assign b point
创建变量时,例如:
int x = 5;
它会存储在内存中的某个地方,很酷。
但是,当我通过执行以下操作更改变量的值时:
x = 10;
内存中发生了什么?
x的新值是否会覆盖使用相同内存地址的旧值?
或者新值被存储在新的内存地址中,然后旧地址被删除?
当我遇到指针时,这个问题就出现了。似乎使用指针更改变量的值与使用另一个值定义变量是相同的。
这是我的代码(大部分是注释(lol)):
#include "iostream"
int main()
{
int x = 5; // declaring and defining x to be 5
int *xPoi
int main()
{
int i=3;
(++i)++;
printf("%d",i);
}
这个程序可以和g++编译器一起工作,但不能和gcc一起工作。如果我写i++++或++i++,它也不能在cpp中工作。我认为c-expression和c++-expression是有区别的。谁能解释一下L-值和R-值?
给定一个Fortran派生类型,其字段是一个c_ptr (来自iso_c_binding)和两个该类型的变量A和B,赋值A=B是如何定义的?如果指针是fortran指针,那么它们实际上会在赋值过程中被取消引用。c_ptr也是如此吗?
USE, intrinsic :: iso_c_binding
...
type all_mine
real :: E
type(c_ptr) :: ptr_to_some_c
end type all_mine
...
type(all_mine) :: A, B
...
A = B ! What happens here?
为什么我不能在C++中做这样的事情呢?(与JavaScript或PHP不同)
int matrix[100][100], ar[100];
//...reading the matrix...
ar = matrix[0];
我希望ar包含matrix[0][0],matrix[0][1].matrix[0][100]。相反,它只会给我一个内存地址。为什么这个功能不能工作( C++没有的确切特性是什么,有什么缺点/优点?)哪一个?)我怎样才能复制这种行为,或者至少是同样的任务。(无需循环和复制)
我是学习围棋的初学者,我对以下两个问题感到困惑:
First:
type S struct{
a func()
b func(i int, j float32, k string)
c *func()
}
func main(){
s := S{c: &func(){}} // Error: Cannot take the address of `func(){}`
}
在这个结构中,c *func()是有效的,但是how can I assigned to it
第二
我知道,函数是一流的公民,所以我可以将函数作为参数传递给另一个函数/方法,也可以声
在某些语言中(C++、Java、Ruby等)赋值返回值,可以在表达式中使用:
x = (y = z); // ok, 'x' gets the value of 'z'
在其他语言(Ada,VHDL)中,赋值是一种正确的语句,不能用作表达式:
x := (y := z); -- error!
然而,在这两种情况下,都有可能找到被称为“赋值运算符”的作业符号的教材。
我的问题是,在第二种情况下,将赋值符号称为“运算符”从技术上讲是正确的,因为它实际上是一个语句,不返回值,不能在表达式的中间使用?
我只是在学习关键字new和delete的指针和动态内存分配。
下面是我的C++代码,用来测试我的理解。
#include <iostream>
using namespace std;
int main() {
// Variable to be pointed to by a pointer
cout << "Create a double variable" << endl;
double n = 3.1415926;
cout << "n = " << n &l
这里有一个类字段,
class someClass {
Int someClassField = nil
...
(请,请(!)忽略可见性问题,这个问题涉及的是总体设计,而不是语言实现)如果我在线查看教程,我被告知这个领域被多线程使用是安全的。当教程说安全时,并不意味着一个线程不能干扰对另一个线程可见的值。这种干扰可能是意图--场可能是一个计数器。教程的意思是,当一个线程更改该字段时,该字段不会处于不安全状态。带着这片土地
class someClass {
List<List> someClassField = new List<Int>()
...
我正在尝试理解来自的以下代码片段
SELECT my_table.*,
@f:=CONVERT(
IF(@c<=>CatId AND @r<=>Rate AND DATEDIFF(Date, @d)=1, @f, Date), DATE
) AS Begin,
@c:=CatId, @d:=Date, @r:=Rate
FROM my_table JOIN (SELECT @c:=NULL) AS init
ORDER BY CatId, Rate, Da
所以我有一个类,它接受两个模板参数,一个是类型,一个是使用函数的类型,它有一个约简函数重复应用到数组中。但是,我得到了一个编译错误。
function_template_test.cpp: In instantiation of 'class _C<int, int(int, int)>':
function_template_test.cpp:36:33: required from here
function_template_test.cpp:11:17: error: field '_C<int, int(int, int)>::op
很难分辨星号与指针的关系。
下面是一些让我感到困惑的代码示例。
typedef struct X { int i_; double d_; } X;
X x;
X* p = &x;
p->d_ = 3.14159; // dereference and access data member x.d_
(*p).d_ *= -1; // another equivalent notation for accessing x.d_
在第五行,我们有(*p).d_ *= -1;。为什么有两个星号?他们的位置意味着什么?
int x = 2;
int* p_x = &x;
如果我有一种具有一流函数的编程语言。当一个生成器函数被共享时,语义应该是什么?
例如:
var f = function() {
foreach (i in 0..42)
yield i;
}
int a = f(); // 0
int b = f(); // 1
// Assigning the generator function
var g = f;
int c = g(); // ??
int d = f(); // ??
我可以想象三件事:
c == 2,d == 3表示生成器函数共享c == 0,d == 2表示创建了新的生成器函数,值初始化为c == 2,
我的代码出现了_CrtIsValidHeapPointer错误。我终于知道是什么引起了麻烦。
我用下面的例子来说明这一点:
char* c=(char*)malloc(20*sizeof(char));
//cout<<&c<<endl;
c="hello world";
//cout<<&c<<endl; //if you uncomment the 2 clauses,you'll see the address is the same
在用户输入时,我们使用符号(&)运算符。这意味着我们将特定的值分配给特定变量的内存地址。但是在赋值过程中,我们不需要符号。在没有任何内存地址规范的情况下,如何传递值?下面给出了示例代码。
#include<stdio.h>
int main()
{
int a, b, total;
scanf("%d%d", &a, &b); //& for memory address
total = a+b; //how the value is being tranfarred to total w