Tag: 指针

未设置的C指针不为空

我正在搞乱C指针。 当我编译并运行以下代码时。 例1: #include int main() { int k; int *ptr; k = 555; if (ptr == NULL) { printf(“ptr is NULL\n”); } else { printf(“ptr is not NULL\n”); printf(“ptr value is %d\n”, *ptr); } printf(“ptr address is %p\n”, ptr); } 我得到输出: ptr is not NULL ptr value is 1 ptr address is 0x7fff801ace30 如果我没有为k赋值: […]

返回局部变量指针 – C

我正在尝试在C中编写一个函数来return传递给函数的字符串的反向。 传入字符串后,我声明一个本地char []来填充字符串的反向。 但是,当我编译程序时,我收到一个警告,说明warning: function returns address of local variable return test; 我是否允许从C中的函数返回局部变量指针? char *reverseString(char *str) { int i, j; char test[strlen(str)]; if(str == 0) return; for(i = 0, j = strlen(str); i = 0; i++, j–) str[j] = test[i]; return test; }

“从不兼容的指针类型分配”警告

我正在编写一个函数来解析带有纹理和动画数据的文件,并将其加载到我声明的一些全局结构中。 我在特定行上收到编译器警告“从不兼容的指针类型分配”。 这是很多代码,所以我只想在这里发布重要的部分。 首先,我的动画例程有一个struct数据类型,如下所示: typedef struct { unsigned int frames; GLuint *tex; float *time; struct animation *next; } animation; 如您所见,结构中的最后一个变量是指向动画完成时默认为另一个动画的指针。 这是加载函数的声明: void LoadTexturePalette(GLuint **texture, animation **anim, const char *filename) 该函数将信息加载到动画数组中,因此是双指针。 在加载每个动画的最后,从文件中提取一个整数,指示“下一个”指针将指向哪个动画(加载的动画)。 fread(tmp, 1, 4, file); (*anim)[i].next = &((*anim)[*tmp]); 在最后一行,我得到编译器警告。 我还没有使用那个变量,所以我不知道警告是否是一个问题,但我觉得我的语法或我的方法在设置该变量时可能是不正确的。

如何在C中初始化指向结构的指针?

鉴于此结构: struct PipeShm { int init; int flag; sem_t *mutex; char * ptr1; char * ptr2; int status1; int status2; int semaphoreFlag; }; 这工作正常: static struct PipeShm myPipe = { .init = 0 , .flag = FALSE , .mutex = NULL , .ptr1 = NULL , .ptr2 = NULL , .status1 = -10 , .status2 […]

将结构指针传递给c中的函数

我将指向结构的指针传递给函数时遇到问题。 我的代码基本上如下所示。 在main函数中调用modify_item后,stuff == NULL。 我希望stuff是一个指向item结构的指针,元素等于5.我做错了什么? void modify_item(struct item *s){ struct item *retVal = malloc(sizeof(struct item)); retVal->element = 5; s = retVal; } int main(){ struct item *stuff = NULL; modify_item(stuff); //After this call, stuff == NULL, why? }

0xDEADBEEF与NULL

在各种代码中,我看到调试版本中的内存分配为NULL … memset(ptr,NULL,size); 或者使用0xDEADBEEF …… memset(ptr,0xDEADBEEF,size); 使用每个优势有什么好处,在C / C ++中实现这一目标的首选方法是什么? 如果指针被赋值为0xDEADBEEF ,那么它仍然不能满足有效数据吗?

OpenCV:将内存中的指针转换为图像

我有一个抓取器可以获取图像并使用以下代码在屏幕上显示它们 while((lastPicNr = Fg_getLastPicNumberBlockingEx(fg,lastPicNr+1,0,10,_memoryAllc))<200) { iPtr=(unsigned char*)Fg_getImagePtrEx(fg,lastPicNr,0,_memoryAllc); ::DrawBuffer(nId,iPtr,lastPicNr,"testing"); } 但我想使用指向图像数据的指针并用OpenCV显示它们,因为我需要对像素进行处理。 我的相机是CCD单色相机,像素的深度是8位。 我是OpenCV的新手,opencv中是否有任何选项可以返回(unsigned char *)Fg_getImagePtrEx(fg,lastPicNr,0,_memoryAllc); 并在屏幕上显示它? 或者从iPtr指针获取数据允许我使用图像数据?

对已经寻址数组基址的指针应用后递减是否会调用未定义的行为?

在寻找关于以下内容的相关或重复问题后无济于事(我只能用边际正义来描述用C标记的指针算术和后减法问题的绝对数量,但足以说“船载”做了一个坟墓对结果集的不公平)我把它扔在戒指中,希望澄清或转介给我的副本。 如果将后递减运算符应用于如下所示的指针(数组序列的简单反向迭代),则以下代码是否会调用未定义的行为? #include #include int main() { char s[] = “some string”; const char *t = s + strlen(s); while(t–>s) fputc(*t, stdout); fputc(‘\n’, stdout); return 0; } 最近向我提出6.5.6.p8 Additive运算符,结合6.5.2.p4,Postfix递增和递减运算符,指定甚至在t已经包含s调用的基地址时执行后递减未定义的行为,无论是否评估t的结果值(不是t–表达式结果)。 我只是想知道是否确实如此。 标准的引用部分是: 6.5.6加法运算符 如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则评估不应产生溢出; 否则,行为未定义。 和…几乎紧密耦合的关系…… 6.5.2.4后缀增量和减量运算符约束 后缀增量或减量运算符的操作数应具有primefaces,限定或非限定的实数或指针类型,并且应为可修改的左值。 语义 postfix ++运算符的结果是操作数的值。 作为副作用,操作数对象的值递增(即,将相应类型的值1添加到其中)。 有关约束,类型和转换以及操作对指针的影响的信息,请参阅加法运算符和复合赋值的讨论。 在更新操作数的存储值的副作用之前,对结果的值计算进行排序。 对于不确定顺序的函数调用,后缀++的操作是单个评估。 具有primefaces类型的对象上的Postfix ++是具有memory_order_seq_cst内存顺序语义的读 – 修改 – 写操作.98) 后缀 – 运算符类似于后缀++运算符,除了操作数的值递减(即,从中减去相应类型的值1)。 前向参考: 加法运算符(6.5.6) […]

在C中,带有两个星号(**)的变量声明是什么意思?

我和C一起工作,我有点生疏了。 我知道*有三个用途: 声明一个指针。 取消引用指针。 乘法 但是,在变量声明之前有两个星号( ** )时它意味着什么: char **aPointer = … 谢谢, 斯科特

将int转换为void指针并再次返回int是否安全?

在C和/或C ++中:将int转换为void指针并再次返回int是否安全? 基于问题“ C ++:将指针转换为int并稍后再返回指针是否安全? ”。