给定一个包含一个double和三个int变量的结构定义(总共4个变量),如果p是指向此结构的指针,其值为0x1000,那么p ++有什么值? 这不是作业问题,所以不要担心。 我只是想为测试做准备,我无法弄清楚这个练习题。 谢谢 这是在C.是的,我希望p增加后的值。 这是一台32位机器
void check(void* elemAddr){ char* word = *((char**)elemAddr); printf(“word is %s\n”,word); } int main(){ char array[10] = {‘j’,’o’,’h’,’n’}; char * bla = array; check(&bla); check(&array); } 输出: word is john RUN FINISHED; Segmentation fault; core dumped; 第一个工作,但第二个不工作。 我不明白为什么会这样。
我想将一些值(比如2345)分配给一个内存位置(比如说0X12AED567)。 可以这样做吗? 换句话说,我该如何实现以下function? void AssignValToPointer(uint32_t pointer, int value) { }
这不是作业,这纯粹是为了我自己的个人教育。 我无法弄清楚如何实现一个对齐的malloc所以在网上查找并找到了这个网站 。 为方便阅读,我将发布以下代码: #include #include void* aligned_malloc(size_t required_bytes, size_t alignment) { void* p1; // original block void** p2; // aligned block int offset = alignment – 1 + sizeof(void*); if ((p1 = (void*)malloc(required_bytes + offset)) == NULL) { return NULL; } p2 = (void**)(((size_t)(p1) + offset) & ~(alignment – 1)); p2[-1] = p1; return […]
假设我有一个函数声明并初始化两个局部变量 – 默认情况下,存储持续时间为auto 。 然后,该函数调用第二个函数,它传递这两个局部变量的地址。 第二个function可以安全地使用这些指针吗? 一个简单的程序化示例,以补充该描述: #include int adder(int *a, int *b) { return *a + *b; } int main() { auto int a = 5; // `auto’ is redundant; included for clarity auto int b = 3; // adder() gets the addresses of two auto variables! is this an issue? int result = […]
我有一些二维数组,如: int shape1[3][5] = {1,0,0, 1,0,0, 1,0,0, 1,0,0, 1,0,0}; int shape2[3][5] = {0,0,0, 0,0,0, 0,1,1, 1,1,0, 0,1,0}; 等等。 我如何制作一系列指针? 我尝试了以下,但它们不起作用( 警告:从不兼容的指针类型初始化 ): int *shapes[]= {&shape1,&shape2}; int *shapes[]= {shape1,shape2}; int **shapes[]= {&shape1,shape2}; 有帮助吗?
假设我有两个代码示例用于创建10个元素的整数数组: int *pi = (int*) 0xDEADBEEF; realloc(pi,10); 另一个是正常写的,即: int *pi; pi= malloc(10*sizeof(int)); 现在,我的问题是:第一种类型的转让是合法的,但没有使用。 为什么,虽然我可以得到我选择的起始位置? 使用常量的指针的初始化是合法的但不使用。 为什么?
有没有什么办法可以将const关键字添加到作为参数传递的数组中来运行: void foo(char arr_arg[]) 如果我在char之前放置const ( void foo(const char arr_arg[]) )或在char ( void foo(char const arr_arg[]) ),那将意味着它的char是常量,而不是arr_arg 。 我刚才读到 ,作为函数的参数发送的数组被表示为指针,因此void foo(char arr_arg[])与void foo(char* ptr_arg) 。 考虑到这一点,我可以将函数重写为void foo(char * const ptr_arg)因为它正是我想要实现的。 但我想知道是否有办法在此声明中添加const关键字void foo(char arr_arg[])因为它与void foo(char * const ptr_arg) (而不是 void foo(char const * ptr_arg)或void foo(const char * ptr_arg) )? 我只是想了解是否存在使用数组表示法[]使arr_arg保持常量的语法。
鉴于所有原始数据类型和对象都分配了内存,因此直观地容易想象指向这些类型的指针。 但是函数指针究竟指向哪里? 鉴于指令被转换为机器代码并驻留在内存中,我们是否应该考虑它们指向与函数指令开头相对应的内存位置? 由于非法内存访问,我们在指针中面临许多错误。 当函数指针指向数据存储器而不是指令存储器时,是否会发生错误?
关于C指针的求职面试问题之一如下: 什么是空指针赋值错误? 我用谷歌搜索了一段时间,没有看到任何合理的解释。 那是什么? 试图通过空指针写? 某种架构或环境特定的东西? 究竟是什么错误?