我正在学习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) 我调用我的程序,它是从标准输入读取一堆整数
int main() {
int* s;
derp(s);
return 0;
}
void derp(int *size) {
scanf("%d", size);
}
Run Code Online (Sandbox Code Playgroud)
为什么这段代码会导致分段错误?
我努力更好地理解指针,我写了这段代码:
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 .
不过,如果有人能够更有说服力地解释它,我将不胜感激.
谢谢!
看一下下面的例子:
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) 我有一个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)
这样可以,还是应该坚持使用矢量声明?
我读pointer作为点缀C,使得C一种特殊的语言.但是,我也使用C++中的指针.我猜在C++中使用指针比在C中使用指针有一些限制.因为指针是C的数据类型.如果我被要求编写一个纯粹的程序C++,我可以使用指针吗?
我有一个C++函数来检查和交换指针数据.我的问题是,一旦变量进入函数它就可以正常工作而没有问题,但每当我从函数返回时,似乎它从未输入,因为在进入函数之前,值仍然保持相同的信息.
以下是代码段.
bool Swap(int* pComp, int* pNew)
{
pComp = pNew;
return true;
}
Run Code Online (Sandbox Code Playgroud)
任何意见是极大的赞赏
我有以下结构:
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) 我有一个指向对象的数组的问题:( ..
我需要生成一个动态的对象向量,然后返回它以便在另一个类中操作它.在下面的代码中,有一个抽象的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)评估指向数组的第一个元素的指针,实际上我可以打印第一个元素而不是另一个,但我无法弄清楚如何访问第二类中数组的每个元素.
我怎么能面对这个?
谢谢大家,
阿尔贝托
static int (*g_data)[3];
我想要的new N元素int[3].我只能这样做如下:
g_data = (int(*)[3]) new int[N*3];
我知道这没关系,使用struct将是另一种解决方案.但是,只是出于好奇,我可以直接调用new的int[3],即没有类型转换?