可能重复: 为什么在写入string时会出现分段错误? 我想写一个函数,反转给定的string传递给它。 但是我不能。 如果我用字符数组提供doReverse函数(见下面的代码),我的代码运行良好。 我不明白为什么这不起作用。 我能够访问doReverse str[0] ,但我不能通过使用char指针来更改数组的任何值。 有任何想法吗? void doReverse(char *str) { str[0] = 'b'; } void main(void) { char *str = "abc"; doReverse(str); puts(str); } 更新: 我知道如何通过传递一个字符数组来写一个反向函数: void reverse1(char p[]) { int i, temp, y; for (i = 0, y = strlen(p); i < y; ++i, –y) { temp = p[y-1]; p[y-1] […]
如果我有一个方法,如: func someMethod(contextPtr: UnsafeMutablePointer<Void>) 如何从contextPtr获取对象? func someMethod(contextPtr: UnsafeMutablePointer<Void>){ let object:MyObject = contextPtr.memory } 得到: “虚空”不能转换为“MyObject” 秘诀是什么? 更多详情: 我在这里实际做的是为SCNetworkReachability设置一个全局callback函数: func callback(reachability:SCNetworkReachability, flags: SCNetworkReachabilityFlags, info: UnsafeMutablePointer<Void>) { let r:Reachability = info.memory } 然后添加callback,如下所示: var context = SCNetworkReachabilityContext(version: 0, info: nil, retain: nil, release: nil, copyDescription: nil) var s = self withUnsafeMutablePointer(&s) { context.info = UnsafeMutablePointer($0) } SCNetworkReachabilitySetCallback(reachability, […]
我正在试图将一个类中的成员函数传递给一个接受成员函数类指针的函数。 我遇到的问题是我不知道如何正确使用这个指针在类内做到这一点。 有没有人有build议? 这是传递成员函数的类的一个副本: class testMenu : public MenuScreen{ public: bool draw; MenuButton<testMenu> x; testMenu():MenuScreen("testMenu"){ x.SetButton(100,100,TEXT("buttonNormal.png"),TEXT("buttonHover.png"),TEXT("buttonPressed.png"),100,40,&this->test2); draw = false; } void test2(){ draw = true; } }; 函数x.SetButton(…)包含在另一个类中,其中“object”是一个模板。 void SetButton(int xPos, int yPos, LPCWSTR normalFilePath, LPCWSTR hoverFilePath, LPCWSTR pressedFilePath, int Width, int Height, void (object::*ButtonFunc)()) { BUTTON::SetButton(xPos, yPos, normalFilePath, hoverFilePath, pressedFilePath, Width, Height); this->ButtonFunc = […]
可能重复: 什么更有意义 – char *string或char *string? C ++中的指针声明:放置星号 我见过很多代码的混合版本。 (顺便说一下,这也适用于C和C ++)。人们似乎用两种方式之一来声明指针,而我不知道哪一个是正确的,哪怕是重要的。 第一种将星号放在types名称旁边的方法如下: someType* somePtr; 第二种方法是把星号放在variables的名字旁边,如下所示: someType *somePtr; 一段时间以来,这一直令我疯狂。 有没有任何标准的方式来声明指针? 这是甚至重要的是如何宣布指针? 我之前使用过这两个声明,而且我知道编译器并不关心它是哪一种。 但是,我看到了以两种不同方式进行指示的事实,这使我相信这背后有一个原因。 我很好奇,如果任何一种方法更可读或逻辑性,我失踪了。
在这种情况下,我不明白如何正确地保证某些东西不是nil 。 package main type shower interface { getWater() []shower } type display struct { SubDisplay *display } func (d display) getWater() []shower { return []shower{display{}, d.SubDisplay} } func main() { // SubDisplay will be initialized with null s := display{} // water := []shower{nil} water := s.getWater() for _, x := range water { […]
在调用下面的代码时,试图快速地将“self”传递给C函数: var callbackStruct : AURenderCallbackStruct = AURenderCallbackStruct.init( inputProc: recordingCallback, inputProcRefCon: UnsafeMutablePointer<Void> ) 在这里将“self”转换为UnsafeMutablePointertypes的理想方式是什么?
是char* , int* , long*还是long long* (相同大小)?
C标准保证size_t是一个可以容纳任何数组索引的types。 这意味着,在逻辑上, size_t应该能够保存任何指针types。 我在Google上发现的一些网站上说,这是合法的和/或应该始终工作: void *v = malloc(10); size_t s = (size_t) v; 那么在C99中,标准引入了intptr_t和uintptr_ttypes,它们是有符号和无符号types,保证能够保存指针: uintptr_t p = (size_t) v; 那么使用size_t和uintptr_t什么区别呢? 两者都是无符号的,都应该能够容纳任何指针types,所以它们在function上看起来是一样的。 除了清晰度之外,有没有真正有说服力的理由使用uintptr_t (或更好的是void * )而不是size_t ? 在一个不透明的结构中,这个领域只能由内部function来处理,是否有理由不这样做? 同样的道理, ptrdiff_t是一个能够保存指针差异的签名types,因此能够保存大多数指针,所以它与intptr_t有什么不同呢? 并不是所有这些types基本上服务于相同function的普通不同版本? 如果没有,为什么? 我不能用其中一个做我不能用另一个做的事情? 如果是这样的话,为什么C99在语言中增加了两个基本多余的types? 我愿意忽视函数指针,因为它们不适用于当前的问题,但随意提及它们,因为我怀疑它们是“正确”答案的核心。
在我的代码中: char *str[] = {"forgs", "do", "not", "die"}; printf("%d %d", sizeof(str), sizeof(str[0])); 我得到的输出为12 2 ,所以我的疑惑是: 为什么有差异? str和str[0]都是char指针,对吗?
例如: sizeof(char*)返回4.像int* , long long* ,我试过的所有东西。 这有没有例外?