标签: pointers

对C中指针的困惑

我正在学习C,现在我对指针感到困惑.我的问题是,为什么不printf("%d",*(i)); 使用多维数组时返回元素而不是地址?

#include <stdio.h>

int main()
{
    int i[2][2] = {{1,8},{2,9},{3, 4}};
    //int i[2] = {1,2,3};
    printf("%d", *(i));
    printf("\n%d", i);
}
Run Code Online (Sandbox Code Playgroud)

c arrays pointers

0
推荐指数
1
解决办法
127
查看次数

scanf并指向int*分段错误

我调用我的程序,它是从标准输入读取一堆整数

int main() {
    int* s;
    derp(s);
    return 0;
}

void derp(int *size) {
    scanf("%d", size);
}
Run Code Online (Sandbox Code Playgroud)

为什么这段代码会导致分段错误?

c pointers scanf segmentation-fault

0
推荐指数
1
解决办法
1441
查看次数

初始化指针,c和c ++编译器之间的区别(gcc-4.3.4)

我努力更好地理解指针,我写了这段代码:

int *a = 17;

printf("%d", a+3);

它使用gcc-4.3.4在c下编译得很好:http://ideone.com/abotd

然而它无法用c ++编译:http://ideone.com/IdGHy

我想知道为什么.

另外,从第一个链接可以看到输出是29.我伪理解发生了什么:sizeof(int)是4,当我写了+ 3而不是添加3到17时,正在添加3*4 .

不过,如果有人能够更有说服力地解释它,我将不胜感激.

谢谢!

c c++ gcc pointers

0
推荐指数
1
解决办法
405
查看次数

C#指针问题

看一下下面的例子:

public void inc(int num) {
   num++;
}

int a = 5;
inc(a);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,inc不会增加a变量本身.它没有指向内存中的相同位置.为了改变a,我将不得不使用ref.

但是,在这个例子中

public static void ExportSelectedRow(GridView gridView, object toObject, int skipCols)
{
    GridViewRow gridViewRow = gridView.SelectedRow;

    if (toObject is DataTable)
    {
        DataTable returnDt = (DataTable)toObject;
        GridViewColsToDatatable(gridView, returnDt, skipCols);
        DataRow dr = returnDt.NewRow();
        for (int i = skipCols; i < gridViewRow.Cells.Count; i++)
            dr[i - skipCols] = gridViewRow.Cells[i].Text;
        returnDt.Rows.Add(dr);
    }

}

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) {
    DataTable dt = …
Run Code Online (Sandbox Code Playgroud)

c# pointers reference

0
推荐指数
2
解决办法
886
查看次数

这是查找动态分配数组长度的好方法吗?

我有一个Matrix类,我想将一个数组传递给构造函数,以便动态设置矩阵的值.我发现如果我分配这样的数组:

double **array;
array = new double*[3];
array[0] = new double[2];
array[1] = new double[2];
array[2] = new double[2];
array[0][0] = 1;
array[0][1] = 1;
array[1][0] = 1;
array[1][1] = 1;
array[2][0] = 1;
array[2][1] = 1;
Run Code Online (Sandbox Code Playgroud)

我可以使用如下方法获取行数和列数:

int getNRows(double **data){
  int size = 0;
  while(*(data+size)){size++;}
  return size;
}

int getNCols(double **data){
  int size = 0;
  while(**(data+size)){size++;}
  return size;
}
Run Code Online (Sandbox Code Playgroud)

这样可以,还是应该坚持使用矢量声明?

c++ arrays pointers dynamic

0
推荐指数
1
解决办法
359
查看次数

可以在纯C++中使用指针吗?

我读pointer作为点缀C,使得C一种特殊的语言.但是,我也使用C++中的指针.我猜在C++中使用指针比在C中使用指针有一些限制.因为指针是C的数据类型.如果我被要求编写一个纯粹的程序C++,我可以使用指针吗?

c c++ pointers

0
推荐指数
1
解决办法
203
查看次数

C++交换指针的函数在范围内工作

我有一个C++函数来检查和交换指针数据.我的问题是,一旦变量进入函数它就可以正常工作而没有问题,但每当我从函数返回时,似乎它从未输入,因为在进入函数之前,值仍然保持相同的信息.

以下是代码段.

bool Swap(int* pComp, int* pNew)
    {
        pComp = pNew;
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

任何意见是极大的赞赏

c++ pointers

0
推荐指数
1
解决办法
240
查看次数

我如何为结构分配内存?

我有以下结构:

struct Node{
    int *VC;
    Node *Next;
};
Run Code Online (Sandbox Code Playgroud)

我的目标是创建指向一个指针的链接列表 int

我的问题是如何为内存分配内存Node.即

int* ptr = (int *) malloc(sizeof(int)*10);
//code to allocate memory for a new Node n
n->VC = ptr;
n->Next = null;   
Run Code Online (Sandbox Code Playgroud)

然后我可能会这样做:

 int *_ptr= (int *) malloc(sizeof(int)*10);
 //code to allocate memory for a new Node c
 c->VC= _ptr;
 c->Next = null;

 n->Next = c;
Run Code Online (Sandbox Code Playgroud)

c pointers linked-list

0
推荐指数
1
解决办法
209
查看次数

如何管理对象的指针数组?

我有一个指向对象的数组的问题:( ..

我需要生成一个动态的对象向量,然后返回它以便在另一个类中操作它.在下面的代码中,有一个抽象的Event类和从它继承并可以实例化的CarArrival.

在生成和填充数组的类中,我有这个函数:

Event** EventGenerator::getEvents() {

Event* cars[EVENTS];

for (int i=0; i<EVENTS; i++) {
    cars[i] = new CarArrival(generator->getNextNumber(8,(float)sqrt(0.4)));
}

sort(cars, cars+(EVENTS), Event::cmp);

return cars;
Run Code Online (Sandbox Code Playgroud)

}

我以这种方式在onther类中调用此函数:


Event** cars = generator->getEvents();

for(int i=0; i<EVENTS; i++) {
    cout << i <<":" << (*cars)[i]->getScheduleTime() << endl;
}
Run Code Online (Sandbox Code Playgroud)

打印完第一个元素后,我得到"分段错误".

我已经在线阅读了一些内容,我明白我错了,因为(*cars)评估指向数组的第一个元素的指针,实际上我可以打印第一个元素而不是另一个,但我无法弄清楚如何访问第二类中数组的每个元素.

我怎么能面对这个?

谢谢大家,

阿尔贝托

c++ arrays pointers object

0
推荐指数
1
解决办法
1001
查看次数

如何为数组类型调用new运算符

static int (*g_data)[3];

我想要的new N元素int[3].我只能这样做如下:

g_data = (int(*)[3]) new int[N*3];

我知道这没关系,使用struct将是另一种解决方案.但是,只是出于好奇,我可以直接调用newint[3],即没有类型转换?

c++ types pointers new-operator

0
推荐指数
1
解决办法
112
查看次数