我是指针的新手,并试图使用指向结构的指针。 但在第一次进入后,我的程序崩溃了。 请帮助我。 这是结构定义: struct students{//structure students definition char name[20]; char RegNo[15]; char CourseUnit[10]; int score; char grade; }; 等级不应由用户输入,而是由程序计算。 到目前为止,这是我写的代码: int main()//start of main { struct students *myStudPtr,myStud[SIZE]; myStudPtr=&myStud[SIZE]; int i;//declare variables int count; printf(“How many students do you want to deal with?\n”); scanf(“%d”,&i);//number of entries for(count=1;countname); printf(“%s\t\t”, myStudPtr->RegNo); printf(“%s\t”, myStudPtr->CourseUnit); printf(“%d\t\t”, myStudPtr->score); if(myStudPtr->score>100) […]
当我使用这段代码时,GCC给我一个’来自不兼容指针类型的初始化’警告(虽然代码工作正常并且做了它应该做的事情,它打印了数组的所有元素)。 #include int main(void) { int arr[5] = {3, 0, 3, 4, 1}; int *p = &arr; printf(“%p\n%p\n\n”, p); for (int a = 0; a < 5; a++) printf("%d ", *(p++)); printf("\n"); } 但是当我使用这段代码时没有给出警告 int main(void) { int arr[5] = {3, 0, 3, 4, 1}; int *q = arr; printf(“%p\n%p\n\n”, q); for (int a = […]
在某些嵌入式设备上,我已经将一个unsigned char指针传递给atoi 而没有 atoi 。 unsigned char c[10]=”12″; atoi(c); 问题:它定义明确吗? 我看到某处字符串函数可以,但是对atoi不确定。 编辑:顺便说一句。 对于下面的答案之一已经表达了一些担忧,即使对于字符串函数(例如strcpy)也可能不行 – 但如果我说得对(?),作者也意味着在实践中这可能是正常的。 另外,我在这里,是否可以执行以下对unsigned char指针的分配 ? 因为我使用了一些抱怨“类型不匹配(赋值)(ptrs to signed / unsigned)”的工具“ unsigned char *ptr = strtok(unscharbuff,”-“); // is assignment also ok to unsigned char?
代码1 #include int main(int argc, char *argv[]) { int j; printf(“%d”, argv[1][0]); return 0; } 代码2 #include int main(int argc, char **argv) { int j; printf(“%d”, argv[1][0]); return 0; } CODE 1和CODE 2都提供相同的输出。 但是CODE 1和CODE 2中主要function的参数2是不同的。 在编译时在数据部分上创建指针数组。 argv是指针数组。 然后我们应该在main函数中声明参数作为指向字符的指针,即** argv。 如何在CODE 1中声明是否正确?
函数指针支持的所有操作与原始指针有什么不同? 是>,<, =原始指针支持的运算符如果有,有什么用?
#include int main(void) { int a[3] = {1,2,3}; printf(“\n\t %u %u %u \t\n”,a,&a,&a+1); return 0; } 现在我不明白为什么a和&a返回相同的值,它背后的推理和实际应用是什么? 还有什么类型的&a和我可以做&(&a)?
考虑以下计划: int main() { int array[9]; const int (*p2)[9] = &array; } 它在C ++中编译良好(参见此处的实时演示)但在C中编译失败。默认情况下,GCC会发出以下警告。 (见此处的现场演示)。 prog.c: In function ‘main’: prog.c:4:26: warning: initialization from incompatible pointer type [enabled by default] const int (*p2)[9] = &array; 但如果我使用-pedantic-errors选项: gcc -Os -s -Wall -std=c11 -pedantic-errors -o constptr constptr.c 它给了我以下编译器错误 constptr.c:4:26: error: pointers to arrays with different qualifiers are incompatible […]
如果我写这个 char *array = “One good thing about music”; 我实际创建一个数组? 我的意思是这样的一样吗? char array[] = {“One”, “good”, “thing”, “about”, “music”};
我可以指定一个整数变量的指针吗? 如下所示。 int *pointer; int array1[25]; int addressOfArray; pointer = &array1[0]; addressOfArray = pointer; 有可能这样做吗?
我无法理解一些指针是如何工作的。 我一直认为,当你创建一个指针变量(p)时,除非你为它设置了malloc空间(p = malloc(x)),否则你不能使用deference和assign(* p = value),或者将它设置为另一个变量的地址(p =&a) 但是在此代码中,第一个赋值一致,而最后一个赋值为segfault: typedef struct { int value; } test_struct; int main(void) { //This works int* colin; *colin = 5; //This never works test_struct* carter; carter->value = 5; } 当colin没有指向任何备用内存时,为什么第一个工作正常? 为什么第二个永远不会工作? 我是用C语言编写的,但具有C ++知识的人也应该能够回答这个问题。 编辑:好的,我知道第一个也不应该工作,但为什么呢 。 这就是我所追求的。