Tag: 指针

双指针vs指针数组(**数组vs * array )

我不清楚这些之间有什么区别2.我的教授写道**数组与* array []相同,我们得到一个例子,他用**数组(所以在课后我尝试用* array交换它] ]它没有用),谁能告诉我这些2是否与他写的一样? 无论如何,这个类是关于动态内存分配的 @一旦我改变了双指针,这一行开始抛出错误 lines = malloc(sizeof(char*)); 以及其他一些内存正在重新分配的地方 @ 2地狱耶,这是整个代码 对于那些评论,但是因为他的陈述是,所以内部没有任何内容 **array = *array[] 大更新 对于给您带来的任何不便,我感到非常抱歉,在写这篇文章时我太累了,这里是整个代码,没有编辑 #include #include #include char **lines; // global text buffer, organized as an array of lines // ——————————————————————————– // initialize global buffer void initialize() { lines = malloc(sizeof(char*)); lines[0] = NULL; } // ——————————————————————————– // return number […]

指针是否也有任何地址或内存分配?

如果指针存储变量的地址……那么我们从哪里得到指针? 我问的是,如果我们直接使用指针,那么必须有一个位置,我们得到这个指针?

C中的指针实现细节

我想知道违反我在下面列出的假设的架构 。 此外,我想知道所有架构的假设是否都是错误的(也就是说,如果它们中的任何一个完全错误的话)。 sizeof(int *)== sizeof(char *)== sizeof(void *)== sizeof(func_ptr *) 无论指向何种数据类型,给定体系结构的所有指针的内存中表示都是相同的。 指针的内存中表示与与体系结构相同的位长的整数相同。 指针数据类型的乘法和除法仅被编译器禁止。 注意:是的,我知道这是荒谬的。 我的意思是 – 是否有硬件支持禁止这种不正确的用法? 所有指针值都可以转换为单个整数。 换句话说,哪些架构仍然使用分段和偏移? 增加指针相当于将sizeof(the pointed data type)到指针存储的内存地址。 如果p是int32*则p+1等于p后4个字节的存储器地址。 我最习惯在连续的虚拟内存空间中使用指针。 对于这种用法,我通常可以将它们视为数字线上的地址。 请参阅堆栈溢出问题指针比较 。

什么是指针调整?

我正在阅读关于维基百科上的整数溢出,并且在看到的字句中遇到了Pointer Swizzling这个术语。 我用谷歌搜索指针调配,但无法理解它。 任何人都可以解释什么是指针调配?

在C中初始化一个char指针。为什么认为危险?

可能重复: C中的char s []和char * s有什么区别? 我初始化一个char指针: char *a=”test”; 我在某些地方读到这被认为是只读的 ,这很危险。 这是否意味着”test”没有在堆中分配空间? 这是否意味着字符串“test”可以在程序中稍后写入? —扩大我的问题— 如果我已经初始化a如上所述,然后我做了一堆其他的初始化,如: int b=20; char c[]=”blahblahblah”; 内存中的“测试”是否会被“20”或“blah”覆盖? 或者这种情况没有根据?

为什么我可以在函数内而不是在main中增加char数组位置

这个函数参数stringLength(char string [])与stringLength(char * string)之间有什么区别,第一个不应该允许增量(string = string +1)对下面的代码有注释? #include #include #include int stringLength(char string[]) { int length = 0; while(*string) { string = string + 1; // I can do it here length++; } return length; } int main(void){ char s[] = “HOUSE”; s = s + 1; // I can not do it here […]

如何理解C中的指针星*?

我正在努力使用指针符号*,我发现它在声明和表达式中的使用方式非常混乱。 例如: int *i; // i is a pointer to an int 但是语法背后的逻辑是什么? *之前的*是什么意思? 我们来看下面的例子。 请纠正我错在哪里: char **s; char *(*s); // added parentheses to highlight precedence 这就是我失去轨道的地方。 parantheses之间的* s意味着:s是指针? 但指针是什么? 括号外的*是什么意思:指向s指向的指针? 所以这个意思是:指向s指向的指针是一个指向char的指针? 我很茫然。 *符号在声明和表达式中的解释是否不同? 如果是这样,它的解释方式有何不同? 我哪里错了?

函数中的C和指针 – 更改不保存

我有这个简单的代码似乎工作(我检查调试器)但是当函数执行结束时,字符串不保存在原始变量中。 void getString(char *iText); int main() { char *inputText=malloc(sizeof(char)); getString(inputText); puts(inputText); free(inputText); system(“pause”); return 0; } void getString(char *iText) { char c; int i=0; while((c=getchar()) != ‘\n’) { iText = realloc(iText,sizeof(char)*(i+1)); iText[i]=c; i++; } iText = realloc(iText, sizeof(char)*(i+1)); iText[i]=’\0′; } 当这个小脚本结束时,我看到一些 ε■ε■ε■ε■ε■ε■ε■ε■ε■ε■ε■ε■▲יע`* 如果我在我的main函数中编写这段代码它正在工作,所以我猜这与我在函数中使用指针的方式有关。

取消引用整数数组的指针

我有一个指向10的整数数组的指针。取消引用这个指针应该给我什么? 例如: #include main() { int var[10] = {1,2,3,4,5,6,7,8,9,10}; int (*ptr) [10] = &var; printf(“value = %u %u\n”,*ptr,ptr); //both print 2359104. Shouldn’t *ptr print 1? }

在Trie Structure字典中添加单词

我正在尝试创建一个可以插入单词的trie结构,但结构必须完全像这样: typedef struct tNode_t { struct tNode_t **l; char *w; } tNode; **l是指向tNode的27个指针数组的指针,这是我不理解的部分。 如果数组是指向tNode的指针,我该如何在其中插入单词? 并且由于数组的大小是27(26个小写字母az和终止字符),你怎么知道输入单词的位置取决于起始字母是什么?