在C中,可以使用forms的字符串文字 char *string = “string here”; 整数文字: uint8_t num = 5; 长文字: long long bigNum = 90322L; 浮点文字: float decimal = 6.3f; 是一种有指针文字的方法吗? 这是内存空间的文字地址。 我正在做一些嵌入式项目的工作,需要硬编码DMA访问的值。 我正在做类似以下的事情: uint32_t *source = 0x08000000; 虽然这编译并正常工作,但我得到以下编译器错误(我正在使用GCC的变体): cc0144: {D} warning: a value of type “int” cannot be used to initialize an entity of type “uint32_t *” cc0152: {D} warning: conversion of […]
我无法弄清楚这个表达式: str + n 其中char str[STRING_LENGTH]和int n 。 我已经在Java中工作了很多,并且直到现在才假设它是字符串和整数的串联,我现在怀疑它。 这是什么意思?
我有以下代码。 也许我没有理解指针算法以及我应该有但是为什么int_pointer增加4而不是1? 使用char_pointer,为什么它不会增加4而不是1? #include int main() { int i; char char_array[5] = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’}; int int_array[5] = {1, 2, 3, 4, 5}; char *char_pointer; int *int_pointer; char_pointer = int_array; // The char_pointer and int_pointer now int_pointer = char_array; // point to incompatible data types. for(i=0; i < 5; i++) { // Iterate […]
我需要传递引用子数组,它是动态分配的2D数组的一部分。 我尝试了以下方法,似乎不起作用。 任何想法,如果有可能吗? void set1(int *a){ a = malloc(2*sizeof(int)); a[0] = 5; a[1] = 6; } void set2(int *a){ a = malloc(2*sizeof(int)); a[0] = 7; a[1] = 8; } int main(){ int **x = malloc(2*sizeof(int*)); set1(x[0]); set2(x[1]); return 0; }
我已经为许多模式编写了代码,但是无法为此编写…..甚至没有任何提示如何继续。 我想生成以下输出: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 …将矩形的宽度和高度指定为输入。
我无法完全理解我在这里阅读的内容的后果: 将一个int指针转换为char ptr,反之亦然 总之,这会有用吗? set4Bytes(unsigned char* buffer) { const uint32_t MASK = 0xffffffff; if ((uintmax_t)buffer % 4) {//misaligned for (int i = 0; i < 4; i++) { buffer[i] = 0xff; } } else {//4-byte alignment *((uint32_t*) buffer) = MASK; } } 编辑 有一个长时间的讨论(在评论中,神秘地删除了)关于指针应该被铸造到什么类型以检查对齐。 现在讨论这个问题 。
我正在尝试使用qsort对字符数组进行排序。 我不明白为什么这不起作用。 我有一个指向比较函数的指针,如man页指定的那样。 有人可以告诉我有什么问题吗? 谢谢。 我的代码: #include #include #include int cmpfunc( const void *a, const void *b) { return *(int*)a – *(int*)b; } void AlphabetSoup( char str[] ) { qsort(str, (size_t) strlen(str), (size_t) sizeof(char), cmpfunc); printf(“%s\n”, str); } int main() { char str1[] = “bcead”; AlphabetSoup(str1); return 0; } 输出:当我期待abcde时的dabce 。
我问了一些具体的问题。 如何在课堂上初始化它们? 如何将函数作为参数传递? 是否需要在类中声明和定义函数指针? 对于问题2,这是我的意思: void s(void) { //… } void f(function) { // what should I put as type to pass a function as an argument //… } f(s);
下面的内容是不是arrayname总是指向C中第一个元素的指针? int myArray[10] = {0}; printf(“%d\n”, &myArray); /* prints memadress for first element */ printf(“%d\n”, myArray); /* this prints a memadress too, shows that the name is a pointer */ printf(“%d\n”,sizeof(myArray)); /* this prints size of the whole array, not a pointer anymore? */ printf(“%d\n”,sizeof(&myArray)); /* this prints the size of the pointer */
当我只知道指向数组的指针时,有没有办法获得数组的长度? 请参阅以下示例 int testInt[3]; testInt[0] = 0; testInt[1] = 1; testInt[2] = 1; int* point; point = testInt; Serial.println(sizeof(testInt) / sizeof(int)); // returns 3 Serial.println(sizeof(point) / sizeof(int)); // returns 1 (这是来自Arduino Code的一个小贴士 – 对不起,我不“说”真正的C)。