69,369
社区成员
发帖
与我相关
我的任务
分享
int i;
int* y;
y = (int*)malloc(sizeof(int) * 5);
for(i=0;i<5;i++)
{
y[i] = i;
printf("%d\n",y[i]);
}
上面这段代码可以顺利执行,输出0,1,2,3,4.
现在就是搞不清这个指针什么时候用*,什么时候不用*了。我自己的理解是y既然是指针数组,那就应该每个数组都是指针啊,就应该是y[i]指向地址而不是值啊
int i;
int* y;
y = (int*)malloc(sizeof(int) * 5);
for(i=0;i<5;i++)
{
y[i] = &i;
printf("%d\n",*y[i]);
}
上面这段代码是错误的,错误信息是invalid type argument of unary '*' (have 'int')
改成这样可以执行,必须加一个强制转换
int i;
int* y;
y = (int*)malloc(sizeof(int) * 5);
for(i=0;i<5;i++)
{
y[i] = &i;
int* yy = y[i];
printf("%d\n",*yy);
}
int SeqList_Insert(SeqList* list, SeqListNode* node, int pos) // O(n)
{
TSeqList* sList = (TSeqList*)list;
int ret = (sList != NULL);
int i = 0;
ret = ret && (sList->length + 1 <= sList->capacity);
ret = ret && (0 <= pos);
if( ret )
{
if( pos >= sList->length )
{
pos = sList->length;
}
for(i=sList->length; i>pos; i--)
{
sList->node[i] = sList->node[i-1];
}
sList->node[i] = (TSeqListNode)node;
关键的这句用的指针赋值,在main函数里面的调用是SeqList_Insert(list, &i, 0);
sList->length++;
}
return ret;
}
[/quote]
y[i] = &i; 得到的i的地址转换成的int值,在C++里不允许这样的隐式转换
int *p;
就表示定义了一个指向整形变量的指针,使用的时候p就表示这个指针,如果在使用中出现了*,就表示取这个指针所指向的值
例如*p就表示一个值
int SeqList_Insert(SeqList* list, SeqListNode* node, int pos) // O(n)
{
TSeqList* sList = (TSeqList*)list;
int ret = (sList != NULL);
int i = 0;
ret = ret && (sList->length + 1 <= sList->capacity);
ret = ret && (0 <= pos);
if( ret )
{
if( pos >= sList->length )
{
pos = sList->length;
}
for(i=sList->length; i>pos; i--)
{
sList->node[i] = sList->node[i-1];
}
sList->node[i] = (TSeqListNode)node;
关键的这句用的指针赋值,在main函数里面的调用是SeqList_Insert(list, &i, 0);
sList->length++;
}
return ret;
}