鉴于数组的名称实际上是指向数组的第一个元素的指针,以下代码: #include int main(void) { int a[3] = {0, 1, 2}; int *p; p = a; printf(“%d\n”, p[1]); return 0; } 按预期打印1 。 现在,鉴于我可以创建一个指向指针的指针,我写了以下内容: #include int main(void) { int *p0; int **p1; int (*p2)[3]; int a[3] = {0, 1, 2}; p0 = a; p1 = &a; p2 = &a; printf(“p0[1] = %d\n(*p1)[1] = %d\n(*p2)[1] = […]
有没有办法找出指针是否指向以下位置: 堆栈 堆 或者程序(如果是的话,哪个部分例如elf .text)? 此外,这可以移植(Linux 64/32位,OSX和Windows 7+)吗? 跟进: 我不是要试图找出是否有某些东西被malloc。 我想有效地将void *指针与程序中的函数区分开来,从void *指针到堆栈或堆上的数据。 这适用于用C编写的语言运行库,而不是“普通”C程序。 到目前为止,这个答案是最有用的: 检查某些东西是否被malloced
首先(一如既往)我想对我的英语道歉,可能不够清楚。 我不擅长C编程,我被要求读取一个未定义长度的“字符串”输入。 这是我的解决方案 #include #include #include char *newChar(); char *addChar(char *, char); char *readLine(void); int main() { char *palabra; palabra = newChar(); palabra = readLine(); printf(“palabra=%s\n”, palabra); return 0; } char *newChar() { char *list = (char *) malloc(0 * sizeof (char)); *list = ‘\0’; return list; } char *addChar(char *lst, char num) { int […]
我尝试了以下代码,以了解如何获取指针数据的大小: #include #include #include int main(){ char *test_char_ptr = “This is just a test”; int *test_int_ptr = (int *) malloc(16*sizeof(int)); for(int i = 0; i<16; i++){ test_int_ptr[i] = i; } printf("%s\n",test_char_ptr); printf("Test char 1: %d\n", (int)sizeof test_char_ptr ); printf("Test char 2:%d\n", (int)sizeof *test_char_ptr ); printf("Test char 3: %d\n", (int)((strlen(test_char_ptr)+1) * sizeof(char))); printf("Test int 1:%d\n", (int)sizeof […]
我想要一个简单的函数,它接收一个字符串并在一些解析后返回一个字符串数组。 所以,这是我的function签名: int parse(const char *foo, char **sep_foo, int *sep_foo_qty) { int i; char *token; … strcpy(sep_foo[i], token); /* sf here */ … } 然后我称之为: char sep_foo[MAX_QTY][MAX_STRING_LENGTH]; char foo[MAX_STRING_LENGTH]; int sep_foo_qty, error; … error = parse(foo, sep_foo, &sep_foo_qyt); … 这样我在编译时会收到警告: warning: passing argument 2 of ‘parse’ from incompatible pointer type 然后在标记为/ * sf的行中执行期间出现分段错误* / 我的C代码有什么问题? […]
任何人都可以告诉我,C中的野指针的含义,如何获得它,这在C ++中是否可用?
打印指针时遇到问题。 每次我尝试编译下面的程序时,我都会收到以下错误: pointers.c:11: warning: format ‘%p’ expects type ‘void *’, but argument 2 has type ‘int *’ 我显然在这里遗漏了一些简单的东西,但是从我见过的其他类似代码的考试中,这应该是有效的。 这是代码,任何帮助都会很棒! #include int main(void) { int x = 99; int *pt1; pt1 = &x; printf(“Value at p1: %d\n”, *pt1); printf(“Address of p1: %p\n”, pt1); return 0; }
键入一个类型和相同类型的指针的正确方法是什么? 这就是我的意思。 我应该这样做: typedef unsigned int delay; typedef unsigned int * delayp; 或者我应该这样做: typedef unsigned int delay; typedef delay * delayp; 或者也许我根本不应该delayp指针而只是使用delay *而不是在我认为必要的任何地方delayp ? 谢谢,Boda Cydo。
我有一个Fortran代码,其中包含许多包含指针的派生类型。 我正在编写一个需要访问这些变量的C ++代码。 我不能在没有指针的情况下重写这些派生类型,因为它们在Fortran代码的数百个不同的地方使用。 以下是示例代码: module simple use iso_c_binding TYPE,bind(C) :: SIMPLEF INTEGER :: A INTEGER, POINTER :: B, C(:) END TYPE SIMPLEF end module simple 我需要从C访问SIMPLEF派生类型。我知道我不能使用它,因为Fortran指针不能在派生类型中,如果它应该可以从C访问。有任何解决方法吗? EXTENSION:作为前一个问题的扩展(由于IanH解决了),我已经派生出了具有成员派生类型的类型。 示例如下: TYPE COMPLEXF INTEGER :: X TYPE (SIMPLEF) :: Y END TYPE COMPLEXF 我是否需要为每个Y成员创建COMPLEXF子程序,即SETY_A,QUERYY_A,SETY_B,QUERYY_BSIZE,QUERYY_B等? 或者有更好的方法来解决这个问题吗?
我正在修改一些代码并遇到一个声明,我无法理解: int *userMask[3][4] = {0}; 究竟是什么指向? 它是一个矩阵,每个元素都是指针吗? 或者它指向一个大小的矩阵[3] [4]? 谢谢 我想我的问题是userMask[2][maskElement][user]在声明为int时如何工作。 userMask不能为int[]以使其正常工作吗? 我不能理解这个权利…… 请注意,感谢您对cdecl Robert的建议。 但是,有没有人知道如何在XP命令提示符中使用它? 我能得到的只是语法错误:(