我在编写一个我们应该写的函数时遇到了一些麻烦。 据说,这是它应该如何工作,但它给了我不兼容的指针类型错误,我不知道如何解决它。 问题出在引用compare_last函数的qsort中。 #include #include #include #define MAX_PERSONS 100 //person structure definition goes here typedef struct{ char last[32]; char first[32]; int year; }Person; //function declarations go here int compare_last(Person * ptr1, Person * ptr2); void main(void){//main function goes here char *infilename[20]; char *outfilename[20]; FILE * fptrin; FILE * fptrout; int i, j; Person musicians[MAX_PERSONS]; printf(“Enter […]
这是从对SO的不同问题的答案中得出的: 除非放在共享头文件中,否则结构定义对源文件是私有的。 没有其他源文件可以访问结构的成员,即使给定了指向结构的指针(因为在其他编译单元中不知道布局)。 如果结构需要在别处使用,则它必须仅用作指针。 放置struct structnameforms的前向声明; typedef struct structname structname; 在头文件中,并在代码库中的其他地方使用structname *。 然后,由于结构成员仅出现在一个源文件中,因此结构的内容实际上是对该文件的“私有”。 这让我很困惑。 为什么你只能使用指向结构的指针,即使你包含一个声明它的头文件(但没有定义它)? 我的意思是,如果我包含一个声明函数的头,一个在单独的实现文件中定义的函数,我仍然可以访问该函数 – 为什么结构不同? 即使您可以获得声明,为什么他们的成员是私人的?
这是出于好奇,我试图在以前的问题上找到我怀疑的答案,但他们似乎没有答案。 所以问这里,我刚写了一个代码,我试图将内存分配给一个int指针(填充数组)并将int值扫描给它。 完成数组后,我想删除分配给指针的数据/内存。 虽然我的代码工作得很好,但是为什么我仍然可以在释放指针之后看到int数组中的值。 然而,如果我使用两次免费它会引发错误(这是在单次使用免费后预期的)。 这不是一个奇怪的行为吗? 我在我的Mac上尝试使用Xcode也在codechef,同样的行为,为什么? int *num=(int *)malloc(n*sizeof(int)); int i; for(i=0;i<n;i++) { scanf("%d",&num[i]); } for(i=0;i<n-1;i++){ temp = some_function(x); } free(num); for(i=0;i<n;i++) { printf("\nnum[%d]= %d\n",i,num[i]); } 上面的代码打印num []内的值,理想情况下它不应该。
char(*p)[15]; char(*p)(int *a); int(*pt)(char*); int *pt(char*); 有人帮忙吗?
有没有办法使用指针跨越整数数组中的所有元素(类似于使用指针跨越字符串元素)。我知道整数数组不是NULL终止所以当我尝试使用指针溢出数组时溢出。所以我添加NULL作为数组的最后一个元素,它工作得很好。 int array[7]={1,12,41,45,58,68,NULL}; int *i; for(i=array;*i;i++) printf(“%d “,*i); 但是,如果数组中的一个元素为0,那将表现为NULL。有没有其他方法可以实现指针跨越整数数组中的所有元素?
我试图合并到数组而没有排序(添加一个然后另一个)使用指针方法,但它只是打印第一个数组,然后打印垃圾值。 我想要做的只是在一个大数组中组合2个数组。 无需排序(至少目前为止)。 void getarray(int*,int); int merge(int*,int*,int,int,int*); main() { int a[10],b[10],c[20]; int i,j,n,m,size; clrscr(); printf(“Enter no. of elements in FIRST array: “); scanf(“%d”,&n); getarray(a,n); printf(“Enter no. of elements in SECOND array: “); scanf(“%d”,&m); getarray(b,m); merge(a,b,n,m,c); printf(“\nMerged Array: \n”); for(i=0;i<n+m;i++) { printf("\t%d\t",c[i]); } getch(); return 0; } void getarray(int *x, int y) { int i; for(i=0;i<y;i++) […]
我正在学习C编程语言,并且在理解指针,数组和只读存储器之间的微小差异时遇到了困难。 我正在使用以下示例: char *myCards = “JQK”; 根据我的理解,这行代码完成的是它在内存的只读段中创建一个空终止字符串,可通过char指针myCards 。 这意味着我能够编译以下内容,但由于字符串的不变性而会收到错误: *myCards = ‘A’; 我试图使用一组int来实现类似的function; 但是,如果可能的话,我完全不确定如何创建这个数组并将其放在内存的只读部分。 我知道我可以使用const关键字并创建一个数组,如下所示: const int myInts[] = {3, 6, 1, 2, 3, 8, 4, 1, 7, 2}; 但是,我可以在此数组初始化后直接执行以下操作: printf(“First element of array: %i\n”, myInts[0]); int *myIntsPtr = myInts; *myIntsPtr = 15; printf(“First element of array: %i\n”, myInts[0]); 我能够通过创建指向它的指针来改变数组的第一个元素,这意味着该数组永远不会被放入只读存储器中。 基本上我一直试图弄清楚我如何能够声明这个int数组,以便它在只读存储器中类似于”JQK” 。 任何见解都有帮助。 谢谢。
有人可以向我解释这段代码是如何工作的。 我试着把它写出来然后把头包住,但我还是输了。 当你设置next->prev = prev next->prev和prev之间的价值差异是什么? 他们不是一样的价值吗? 对于下一行也是同样的问题。 我尝试写出一个ListElement结构来试图帮助理解,但我仍然感到困惑。 任何答案或帮助将不胜感激,或任何其他可以让我理解的参考。 我是一个视觉学习者,所以如果你碰巧知道这个很好的可视化,我会很感激。 int unlink(ListElement *element) { ListElement *next = element->next; ListElement *prev = element->prev; next->prev = prev; prev->next = next; return 0; }
t变量从assigntime函数开始出现错误,说它必须有一个指向struct或union类型的指针。 指针是我的弱点,如果有人能解释,不只是给我答案,我需要做些什么来解决这个问题最有帮助! 干杯。 //MY TIME C FILE #include “my_time.h” #include #include #include struct my_time_int { int hour; int minute; int second; }; void init_my_time(my_time *t) { t=(my_time)malloc(sizeof(struct init_my_time*)); } /* * Alter hour, minute, and second * Param h new value for hour * Param m new value for minute * Param s new value […]
我知道char ** vs const char **事情(就像在c faq中描述的那样)但是我看不到任何使用指向数组的指针的情况会导致数组内部的一些内容被实际修改。 我的代码: void fun(const char (*p)[6]) { printf(“%s”, p[0]); } int main(int argc, char *argv[]) { char a[6] = “hello”; char (*c)[6]; c = &a; fun(c); } 使用gcc编译时给出以下输出: test.c:17:9: warning: passing argument 1 of ‘fun’ from incompatible pointer type test.c:5:10: note: expected ‘const char (*)[6]’ but argument is of […]