Tag: 指针

假设指针是C中int的大小是否安全?

在设计新的编程语言时,可以安全地假设C int和指针在机器上的大小相同吗?

函数定义中的指针与数组:void fct1(int * p)和void fct1(int p )之间有什么区别?

我想知道它们之间有什么区别 void fct1(int *p) 和 void fct1(int p[]) 我知道这两个都是指针,但有任何差异

获取未初始化指针的地址是未定义的行为吗?

N1570声明这是未定义的行为: §J.2/ 1具有自动存储持续时间的对象的值在不确定时使用(6.2.4,6.7.9,6.8)。 在这种情况下,我们的指针具有不确定的值: §6.7.9/ 10如果没有显式初始化具有自动存储持续时间的对象,则其值是不确定的。 如果未显式初始化具有静态或线程存储持续时间的对象,则: – 如果它有指针类型,则将其初始化为空指针; 然后,我假设以下测试程序显示未定义的行为: #include int main(void) { char * ptr; printf(“%p”, (void*)&ptr); } 我的动机是strtolfunction。 首先,让我引用与endptr参数相关的endptr : §7.22.1.4/ 5如果主题序列具有预期forms且base的值为零,则根据6.4.4.1的规则将以第一个数字开头的字符序列解释为整数常量。 […]指向最终字符串的指针存储在endptr指向的对象中,前提是endptr不是空指针。 §7.22.1.4/ 7如果主题序列为空或没有预期的forms,则不进行转换; 如果endptr不是空指针,则nptr的值存储在endptr指向的对象中。 这意味着endptr需要指向一个对象,并且该endptr在某个时候被解除引用。 例如, 此实现是这样做的 : if (endptr != 0) *endptr = (char *)(any ? s – 1 : nptr); 然而, 这个高度赞成的答案以及这个手册页都显示endptr被传递给strtol未初始化。 是否有一个exception导致这种未定义的行为?

在C中,是否需要在退出处释放指针?

可能重复: 退出C应用程序时,是否自动释放了malloc-ed内存? 在C中,是否需要在退出处释放指针? 当程序存在时,是否从指向仍然指向已分配块的指针释放内存? 它依赖于操作系统吗?

如果我可以通过C中的指针修改它,那么const限定符的目的是什么?

可能重复: 这个邪恶的演员是否被邪恶的编译器打败了? 你好, 如果我可以通过指针修改常量,那么它的目的是什么? 以下是代码: #include #include int main() { const int a = 10; int *p = (int *)&a; printf(“Before: %d \n”, a); *p = 2; /*a = 2; gives error*/ printf(“After: %d \n”, *p); return 0; } OUTPUT: 之前:10 之后:2 按任意键继续 。 。 。 使用Visual Studio 2008。

内存如何分配给不同数据类型的变量?

我写了以下代码。 #include int main() { int x = 1 ; int *j = &x ; int y = 2 ; int *t = &y ; printf(“%p\n” , (void *)j); printf(“%p” , (void *)t); } 输出为0028FF14 0028FF10 。 我要说的是,地址之间的差异是“4”。 而在这种情况下 #include int main() { char x = ‘t’ ; char *j = &x ; char y […]

realloc无效的旧大小

免责声明:这是作业。 我正在尝试它,不要指望或希望任何人为我做这件事。 只是几个指针(呵呵),我出错了将不胜感激。 作业要求我创建一个包含10个元素的int*数组,然后尝试在其中插入一百万个int。 每个插入检查是否需要调整数组的大小,如果需要,我会增加它的大小,以便它可以容纳一个元素。 当我插入10,000个元素时,它工作正常,但如果我尝试100,000个元素,我会收到以下错误: *** glibc detected *** ./set2: realloc(): invalid old size: 0x00000000024dc010 *** 这是我正在运行的代码。 我评论过它,所以它很容易阅读。 void main() { //begin with a size of 10 int currentsize = 10; int* arr = malloc(currentsize * sizeof(int)); int i; //initalize with all elements set to INT_MAX for(i = 0; i < currentsize; i++) { […]

字符串匹配的C代码似乎不起作用

#include #include char tracks[][80] = { “I left my heart in Harvard Med School”, “Newark, Newark – a wonderful town”, “Dancing with a Dork”, “From here to maternity”, “The girl from Iwo Jima”, }; void find_track(char search_for[]) { int i; for (i = 0; i < 5; i++) { if (strstr(tracks[i], search_for)) printf("Track %i: '%s'\n", […]

如何从C中的函数返回字符数组?

甚至可能吗? 假设我想返回一个包含两个字符的数组 char arr[2]; arr[0] = ‘c’; arr[1] = ‘a’; 来自一个function。 我甚至用什么类型的function? 我唯一的选择是使用指针并使函数无效吗? 到目前为止,我已经尝试过使用char *函数或char []。 显然你只能有char(* [])的function。 我想避免使用指针的唯一原因是函数必须在遇到“返回内容”时结束。 因为“something”的值是一个字符数组(不是字符串!),它可能会根据我通过main函数传递给函数的值来改变大小。 感谢提前回复的任何人。

单字节关闭指针在C中仍然有效?

我可能会弄错,但我似乎记得对于给定的内存分配,例如 char *p = malloc(4); 指针p是分配中所有字节以及超出该分配的第一个字节的有效指针。 因此,通过指针p访问存储器只有偏移p[0] .. p[3]有效。 但是对于指针比较&( p[4] )也将是一个有效的指针。 这是正确的吗?C标准( 链接 )中的位置是这样说的吗? 似乎6.5.9 p6可能暗示正确的答案方向,但它仍然有点模糊。