Tag: 指针

如何在托管代码环境之外安全编程?

如果您是使用C或C ++编程的人,没有内存管理的托管语言优势,类型检查或缓冲区溢出保护,使用指针算法,您如何确保您的程序是安全的? 你使用了很多unit testing,还是只是一个谨慎的编码器? 你有其他方法吗?

释放指针并将其指定为NULL有什么区别?

有人能告诉我两者之间的区别: int *p; p=(int*)malloc(10*sizeof(int)); free(p); 要么 int *p; p=(int*)malloc(10*sizeof(int)); p=NULL;

指向多种类型的指针数组,C

使用malloc可以有多个类型的数组吗? 编辑: 目前我有: #include #include #include #define int(x) *((int *) x) int main() { void *a[10]; a[0] = malloc(sizeof(int)); int(a[0]) = 4; char *b = “yola.”; a[1] = malloc(strlen(b)*sizeof(char)); a[1] = b; printf(“%d\n”, int(a[0])); printf(“%s\n”, a[1]); } 但它很乱。 其他方法? 编辑:清理了一下。

如何使用指针复制字符串

这是我写的一个复制字符串常量的程序。 程序运行时崩溃。 为什么会这样? #include char *alpha = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”; char c; char *l; main(){ while((c = *alpha++)!=’\0′) *l++ = *alpha; printf(“%s\n”,l); }

char * s 和char(* s)之间有什么区别?

当我阅读有关C语言的书籍时,两级指针给我带来了很多困扰。 char s[5][5]; char *s[5]; char (*s)[5]; 那么他们之间有什么区别?

为什么我不能直接在C中为指针分配数组?

我有以下程序。 但是,我无法理解为什么我必须传递数组的地址。 当他们都指向同一个地址时。 这是int数组的第一个元素的地址。 当我尝试执行“从不兼容的指针类型分配”时,我收到警告: ptr = var; 完整源代码: void print_values(int (*ptr)[5]) { size_t i = 0; for(i = 0; i < 5; i++) { printf("%d: [ %d ]\n", i, (*ptr)[i]); } } int main(void) { /* declare a pointer to an array integers */ int (*ptr)[5] = NULL; /* array of integers */ int […]

为什么在C中使用指针?

我仍然想知道为什么在C中你不能简单地使用普通变量设置一些东西。 变量本身是指向数据的指针,不是吗? 那么为什么当你可以简单地使用原始变量时,指针指向变量中的数据呢? 是否要访问所述变量中的特定位(或字节,我猜)? 我确信这是合乎逻辑的,但是我从来没有完全掌握这个概念,当阅读代码看到*pointers总是让我失望。

如何编写更好的strlen函数?

我正在阅读“编写伟大的代码卷2”并显示以下strlen inslementation: int myStrlen( char *s ) { char *start; start = s; while( *s != 0 ) { ++s; } return s – start; } 这本书说这种实现对于没有经验的C程序员来说是典型的。 在过去的11年里,我一直在使用C语言进行编码,我无法在C中看到如何编写比这更好的函数(我可以想到在汇编中编写更好的东西)。 如何在C中编写比这更好的代码? 我看了glibc中strlen函数的标准库实现,我无法理解它的大部分内容。 在哪里可以找到有关如何编写高度优化代码的更好信息?

当铸造指针有增量运算符时会发生什么?

例如: int x[100]; void *p; x[0] = 0x12345678; x[1] = 0xfacecafe; x[3] = 0xdeadbeef; p = x; ((int *) p) ++ ; printf(“The value = 0x%08x”, *(int*)p); 编译上面的代码会在++运算符的行上生成一个左值所需的错误。

为什么我可以在用双引号声明时使用指针作为字符串,而不是在C中用花括号括起来?

如果我声明并使用这样的指针: int counter; char *pCow = “pCow goes MOO”; for(counter = 0; counter < 14; counter++) printf("%c", pCow[counter]); 它显示整个字符串并且工作,是的,并且有很多欢乐。 但是,如果我使用这样的初始化器: int counter; char *pCow = {‘p’,’C’,’o’,’w’,’ ‘,’g’,’o’,’e’,’s’,’ ‘,’M’,’O’,’O’,’\0′}; for(counter = 0; counter < 14; counter++) printf("%c", pCow[counter]); 程序崩溃了,pCow拒绝为我的享乐主义乐趣而呻吟! 3 Warnings. 0 Errors line 11 (near initialization for ‘pCow’) [enabled by default] C/C++ Problem line 11 […]