说我有以下内容: typedef struct { int x; int y; char a; char b; } myStruct; 通过将引用传递给空函数,或者通过从函数返回myStruct ,创建具有函数的新myStruct是更好的做法吗? void init(myStruct* s){ //some code } int main(){ myStruct s; init(&s); return 0; } VS myStruct init(){ myStruct r; //some code return r; } int main(){ myStruct s = init(); return 0; }
将指向非const的指针转换为指向const的指针是合法的。 那么为什么将指向非const的指针转换为指向const的指针是不合法的呢? 例如,为什么以下代码是非法的: char *s1 = 0; const char *s2 = s1; // OK… char *a[MAX]; // aka char ** const char **ps = a; // error!
在objective-c中,我真的无法理解这一点: void *x = &x; 我的理解是: 声明一个generics指针(因此类型为void *),指针变量名称为x,并且此指针指向对变量的引用( 应该已经声明 – 但它不是已声明 ),名为x。 对我来说很困惑!
相同类型的两个指针的差异总是一个。 #include #include int main(){ int a = 5,b = 10,c; int *p = &a,*q = &b; c = p – q; printf(“%d” , c); return 0; } Output is 1. 我不明白这背后的原因
所以我读了几十个将2D数组指针传递给函数的例子,以便在函数中获取/更改该数组的值。 但是有可能在函数内部创建(分配内存)。 像这样的东西: #include void createArr(int** arrPtr, int x, int y); int main() { int x, y; //Dimension int i, j; //Loop indexes int** arr; //2D array pointer arr = NULL; x=3; y=4; createArr(arr, x, y); for (i = 0; i < x; ++i) { for (j = 0; j < y; ++j) { printf("%d\n", […]
我在书中看到了这一点(以及互联网上的许多消息来源): 数组变量指向数组中的第一个元素。 如果这是真的,那么数组变量和第一个元素是不同的 。 对? 它意味着通过下面的代码,它将产生两个不同的结果: int main(){ char msg[] = “stack over flow”; printf(“the store string is store at :%p\n”,&msg); printf(“First element: %p\n”,&msg[0]); } 但是我收到了两个案例的相同结果。 因此,通过这个例子,我认为我们应该说:数组变量是第一个元素。 (因为它有相同的地址) 我不知道这是真还是错。 请教我。
我知道这很简单,但我似乎无法做到这一点。 我的function是这样的: int GefMain(int array[][5]) { //do stuff return 1; } 在我的主要: int GefMain(int array[][5]); int main(void) { int array[1800][5]; GefMain(array); return 0; } 我提到了这个有用的资源,但我仍然收到错误”warning: passing argument 1 of GefMain from incompatible pointer type.” 我究竟做错了什么? 编辑: 代码在两个文件中,由编译器链接在一起。 我没有使用gcc。 上面的代码正是我所拥有的,除了函数在main中声明为“extern int”。 谢谢大家的时间。
我一直在阅读这个问题,但我无法得到结果代码来解决问题。 我应该如何更改它以使其工作? void print2(int ** array,int n, int m); main() { int array[][4]={{1,2,3,4},{5,6,7,8}}; int array2[][2]={{1,2},{3,4},{5,6},{7,8}}; print2(array,2,4); } void print2(int ** array,int n,int m) { int i,j; for(i=0;i<n;i++) { for(j=0;j<m;j++) printf("%d ",array[i][j]); printf("\n"); } }
所以我试图使用ether_aton()返回一个struct ether_addr * 。 我试图把它放在我的struct ether_header *eptr (来自net / ethernet.h)中,它有ether_shost成员。 我试过这个: struct ether_header *eptr; /* net/ethernet.h */ … (struct ether_addr*)(eptr->ether_shost) = ether_aton(SRC_ETHER_ADDR); 这给了我”Error: lvalue required as left operand of assignment” 我知道我只是没有正确地投射,但无法弄清楚如何。 编辑:结束了它。 谢谢你的帮助。 struct ether_addr* eth_addr = ether_aton(SRC_ETHER_ADDR); int i; for(i=0; iether_shost[i] = eth_addr->ether_addr_octet[i]; 只需要分别分配每个八位字节。
可能重复: 理解指针有什么障碍,克服它们可以做些什么? 只是想知道是否有人可以“指出我”指向一个很好的教程 会非常感激的 谢谢