Tag: 指针

* ptr 和(* ptr)之间的差异

对于以下代码: int (*ptr)[10]; int a[10]={99,1,2,3,4,5,6,7,8,9}; ptr=&a; printf(“%d”,(*ptr)[1]); 它应该打印什么? 我期待这里的垃圾值,但输出为1 。 (我得出结论,初始化这种方式指针数组,即ptr[10]将按顺序开始指向a[10]元素。 但是这个代码片段怎么样: int *ptr[10]; int a[10]={0,1,2,3,4,5,6,7,8,9}; *ptr=a; printf(“%d”,*ptr[1]); 它给出了分段错误。

何时/为什么使用fscanf()函数是个坏主意?

在一个答案中有一个有趣的声明:“使用fscanf()函数几乎总是一个坏主意,因为它可以在失败时将文件指针留在未知位置。我更喜欢使用fgets()来获取每一行然后是sscanf()那个。“ 您可以扩展使用fgets()和sscanf()读取某些文件的时间/原因可能更好吗?

传递函数指针

关于如何将指针传递给指针函数,我有点困惑。 我有一个函数,它指向一个我理解没有问题的函数(ExecBlock)。 但是我给了另一个函数原型(ExecBlock2),它接受了解引用指针(我不确定它到底是什么),如果传递函数有任何参数,也会接受参数。 如果有人可以解释优先级以及解释指针函数究竟会做什么。 这不仅仅是传递函数本身吗? 在这种情况下(void *)做什么? int ExecBlock (void (*f) (void), int isSet) { return ExecBlock2( HOW TO PASS HERE? , NULL, isSet); } int ExecBlock2(void *(*f)(void *), void *arg, int isSet) { … more code } 谢谢!

使用赋值而不是memcpy()在C中复制结构

直到最近,我才看到用memcpy()复制结构字段。 在类和在线指令中,将一个结构的内容复制到另一个结构中通常看起来像 struct block *b0 = malloc(sizeof(struct block)); struct block *b1 = malloc(sizeof(struct block)); /* populate fields in *b0 */ memcpy(b1, b0, sizeof *b1); /* copy contents of b0 into b1 */ /* free b0, b1 */ 但是,也可以通过替换memcpy()的简单赋值来完成此任务。 *b1 = *b0; /* dereferenced struct assignment */ 有没有充分的理由说明为什么它没有被广泛使用(至少在我有限的经验中)? 这两个方法是赋值和memcpy()等价,还是有一些令人信服的理由一般使用memcpy() ?

C指向结构的双指针

我试图找出一个指向C结构的双指针,无法弄清楚出了什么问题……简单的来源如下: typedef struct { int member; } mystruct; void myfunc(mystruct **data) { (*data)->member = 1; } void main(int argc, char *argv[]) { mystruct **data; myfunc(data); printf(“member = %d\n”, (*data)->member); } 这里有一个类似的问题: 如何使用指向C中结构指针的指针? 关于如何通过双指针修改结构的成员。 解决方案是语法(*data)->member = 1; 这是有道理的。 但是在我的小应用程序中,我在执行该行时收到了seg错误。 我究竟做错了什么? 谢谢

返回结构指针

假设我有以下结构和函数返回一个指针: typedef struct { int num; void *nums; int size; } Mystruct; Mystruct *mystruct(int num, int size) { //Is the following correct? Is there a more efficient way? Mystruct mystruct; mystruct.num = num; mystruct.size = size; mystruct.nums = malloc(num*sizeof(size)); Mystruct *my; *my = mystruct; return my; } 我想使用上面的函数定义任何Mystruct指针。 我应该声明一个Mystruct变量,定义Mystruct的属性,指定它的指针,并返回指针或通过指针立即定义mystruct属性的属性?

2D数组不会衰减到指针指针

到目前为止,我非常肯定 int arr[4][5]; 然后arr将衰减到指针指针。 但这个链接certificate我错了。 我不知道如何得到arr指针指针,但对我来说这似乎很明显。 因为arr[i]将是一个指针,因此arr应该是指向指针的指针。 我错过了什么。

解除引用指针和访问数组元素之间的区别

我记得一个示例,其中演示了指针和数组之间的区别。 当作为函数参数传递时,数组衰减到指向数组中第一个元素的指针,但它们不等效,如下所示: //file file1.c int a[2] = {800, 801}; int b[2] = {100, 101}; //file file2.c extern int a[2]; // here b is declared as pointer, // although the external unit defines it as an array extern int *b; int main() { int x1, x2; x1 = a[1]; // ok x2 = b[1]; // crash […]

为什么我不能使用此代码覆盖字符串?

代码 : #include “stdio.h” #include “string.h” int main() { char *p = “abc”; printf(“p is %s \n”, p); return 0; } 输出 : p是abc 代码 : #include “stdio.h” #include “string.h” int main() { char *p = “abc”; strcpy(p, “def”); printf(“p is %s \n”,p); return 0; } 输出 : 分段故障(核心转储) 有人能解释为什么会这样吗?

使用strcpy()和复制C中char *的地址之间的区别

我有两个动态分配的数组。 C char **a = (char**)malloc(sizeof(char*) * 5)); char **b = (char**)malloc(sizeof(char*) * 5)); for (int i = 0; i < 7, i++) { a[i] = (char*)malloc(sizeof(char)*7); b[i] = (char*)malloc(sizeof(char)*7); } 如果a[0]是”hello\0″并且我想将a[0]复制到b[0] , strcpy和指针赋值是否相同? 例如: strcpy(b[0], a[0]) b[0] = a[0] 这些都会做同样的事吗?