我正在读一本名为Java和C的书:关键差异,为Java开发人员学习Objective-C.(我的背景是C#/ Java所以指针和管理内存的概念对我来说是新的,所以请耐心等待)
在第2章中,它解释了这个例子的指针:
int i = 1;
int *iptr;
iptr = &i;
*iptr = 2;
Run Code Online (Sandbox Code Playgroud)
我理解上面,其中*iptr是一个指针,它分配了内存位置i,也是从指针iptr我们可以访问的值iptr指向的*iptr语法.
在本书的下方还有以下片段:
//..
NSMutableString *z = [[[NSNutableString alloc]init] autorelease];
[z appendString:@"Zombie "];
//...
Run Code Online (Sandbox Code Playgroud)
根据我对第2章的理解,该行[z appendString:@"Zombie "]应该是[*z appendString:@"Zombie "],因为我们希望实际的NSMutableString,而不是它的指针,被发送消息appendString!我知道我错了,有些东西我错过了,请指出正确的方向.
非常感谢,
朱塞佩
在C++中有没有办法制作一个"untyed"函数指针?例如:
// pointer to global function
void foo( void (*fptr)() );
// pointer to member
void foo( void (Bar::*fptr)() );
Run Code Online (Sandbox Code Playgroud)
有没有办法可以删除该成员所在的班级?所以我可以这样做:
void foo( void ("any type"::*fptr)(), "same type as for the pointer" &instance );
Run Code Online (Sandbox Code Playgroud)
然后,在foo中,我想将该指针存储在一个列表中,这样我就可以在列表上进行迭代并调用指向的函数/成员,而不管它属于哪个类.当然,我需要一个可以调用该函数的实例列表.
谢谢.
我有一个2D数组指针
main.c
Int32 * pRxSeqAddr[2][2];
func(pRxSeqAddr);
Run Code Online (Sandbox Code Playgroud)
/
func.c
void func( Int32** pRxSeqAddrPtr)
{
///
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
argument of type "Int32 *(*)[2]" is incompatible with parameter of type "Int32 **
Run Code Online (Sandbox Code Playgroud)
我知道如果它是指针的一维数组,那么这个函数调用很好,但2D唠叨我...
请帮忙
考虑以下情况:
Class** array = new Class*[8];
array[1] = new Class(1,2);
Run Code Online (Sandbox Code Playgroud)
只是做" delete[ ] array足够"或者我应该在前者之前加上" delete array[1]".我对内存管理并不完全满意.
我试图将int的内存值复制到char缓冲区.代码如下所示,
#define CPYINT(a, b) memcpy(a, &b, 4)
............
char str1[4];
int i = 1;
CPYINT(str1, i);
printf("%s",s);
...........
Run Code Online (Sandbox Code Playgroud)
当我打印str1时,它是空白的.请澄清.
我有这个结构:
#define sbuffer 128
#define xbuffer 1024
typedef struct{
char name[sbuffer];
char att[sbuffer];
char type[sbuffer];
int noOfVal;
int ints[xbuffer];
double doubles[xbuffer];
char *strings[xbuffer];
} variable;
Run Code Online (Sandbox Code Playgroud)
我需要从这个结构创建一个数组,我这样做了
variable *vars[512]; //is it right
Run Code Online (Sandbox Code Playgroud)
如果我想把我在s中的字符串放入名称中,我就这样做了:
char *s = "What Ever";
strcpy(vars[0]->name,s);
Run Code Online (Sandbox Code Playgroud)
但这对我不起作用,任何人都可以帮忙吗?
说我做这样的事情
for(int i = 0; i < 10; i++)
{
//create a pointer object using new
//use the object
}
Run Code Online (Sandbox Code Playgroud)
在循环中使用它之后是否需要删除指针对象?我当时想,如果我没有删除它,它将继续创建一个新对象10次,然后对象就会挂在那里,吃掉资源.
我经常收到有关将错误的指针类型传递给函数的警告,我只想一劳永逸地理解这一点.
这两者有什么区别?
CFURLRef *ref=(CFURLRef *)sourceURLArray[0];
CFURLRef ref=(CFURLRef )sourceURLArray[0];
Run Code Online (Sandbox Code Playgroud)
第一个实际引用数组中对象的内存地址吗?第二个是否复制了它?
我目前追求的主要代码风格是拥有一系列值或对象.我希望能够使用这些值,将它们传递给其他函数,而无需更改原件.
从我所尝试的2个函数声明开始,如下所示.
- (void) loadAudioFileIntoMemory:(CFURLRef *)address channel:(int) value row:(int) value2;
- (void) loadAudioFileIntoMemory:(CFURLRef )address channel:(int) value row:(int) value2;
Run Code Online (Sandbox Code Playgroud)
有什么区别?
一个新手问题:
我正在练习赋予char指针,但发现没有打印出来.这是代码:
#include <stdio.h>
int main (void)
{
char * option_string = NULL;
option_string = (char*)malloc(sizeof(5));
memset(option_string, 0, sizeof(char) * 5);
int j;
for ( j = 0; j < 5; j++)
{
*option_string++ = 'a';
}
printf("print options_string: %s\n", option_string); //!nothing was printed out!
free(option_string);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
可能重复:
删除指针后禁用指针是否合适?
我的教授告诉我们,在我们删除它指向的已分配空间后,将指针设置为0是一个好习惯,而且我一直试图养成这样做的习惯.但是当我这样做时,我的编译器会发出警告:
警告W8004 LinkedList.h 102:为'nPtr'分配一个从未在函数LinkedList :: remove(int)中使用的值
我知道警告不是世界末日,我的程序仍然可以编译,但我的OCD不会放过它.所以我问你更多知识渊博的程序员:
删除它的节点后将指针设置为0是否常见,这是一个很好的做法吗?如果我继续让我的程序编译时出现这样的警告,这有关系吗?感谢所有答案!