Tag: 指针

C中的外部和静态指针

嗨什么可能是静态和外部指针的用法? 如果他们存在

指针在嵌入式平台上由C中的整数构成

我遇到了以下代码: #define ADCA (*(volatile ADC_t*)0x200) 它适用于AVR微控制器的嵌入式C代码。 ADC_t是一个联盟。 我知道(volatile ADC_t*)0x200它是一个指向绝对存储器地址的指针,但我仍然不太确定第一个*意味着什么。

如何指向数组的指针?

int s[4][2] = { {1234, 56}, {1212, 33}, {1434, 80}, {1312, 78} }; int (*p)[1]; p = s[0]; printf(“%d\n”, *(*(p + 0))); // 1234 printf(“%d\n”, *(s[0] + 0)); // 1234 printf(“%u\n”, p); // 1256433(address of s[0][0]) printf(“%u\n”, *p); // 1256433(address of s[0][0]) 任何人都可以解释为什么做*(*(p + 0))打印1234 ,做*(s[0] + 0)也打印1234 ,当p = s[0] ,为什么p和*p给出相同的结果? 感谢你在期待。

返回错误的数组长度

可能重复: C编程语言中数组的大小? 我一直在摆弄C以便更好地熟悉它,并认为我可能偶然发现了一个我不确定如何解决的初始化/指针问题。 下面的程序是ROT13的一个实现,所以它需要一个输入字符串,并将每个字母移动13,从而得到密文。 我程序的输出显示正确的移位,但它不会超过4个字符,让我想知道sizeof是否被错误地使用。 任何其他建议都表示赞赏,我确信此时我已经搞砸了一些事情。 #include #include void encrypt(char *); int main(void){ char input[] = “fascs”; encrypt(input); return 0; } void encrypt(char *input){ char alphabet[] = “abcdefghijklmnopqrstuvwxyz”; printf(“Input: %s \n”, input); int inputCount = sizeof(input); printf(“Characters in Input: %i \n\n”, inputCount); //holds encrypted text char encryptedOutput[inputCount]; //Initialize counters int i, j = 0; // […]

在realloc之后使用原始指针?

我正在阅读Richard Reese的新书(2013年5月)O’Reilly的书“理解和使用C指针”,我对其中的一些代码有疑问,第87页。 if (++length > maximumLength) { char *newBuffer = realloc (buffer, maximumLength += sizeIncrement); if (newBuffer == NULL) { free (buffer); return NULL; } currentPosition = newBuffer + (currentPosition – buffer); buffer = newBuffer; } 我希望变量的名称是不言自明的; 如果需要上下文,我将编辑以提供整个代码块而不仅仅是这个摘录。 我的问题是关于行currentPosition = newBuffer + (currentPosition – buffer); 。 我对realloc()理解是,当新分配成功时,最初分配的内存被释放。 如果这是正确的,那么有问题的线是使用悬空指针,不是吗? 该表达式的RHS上的buffer和currentPosition都是指向已释放的内存的指针。 我的直觉是重写这个以避免使用悬挂指针通过使用length ,毕竟已经存在。 我想用以下代码替换最后两行: buffer = newBuffer; […]

在C中将指向函数的指针作为只读方式传递

正如标题所说,我可以传递指向函数的指针,因此它只是指针内容的副本吗? 我必须确保该function不会编辑内容。 非常感谢你。

C将参数作为void-pointer-list传递给LoadLibrary()中的导入函数

我遇到的问题是我想创建一个通用命令行应用程序,可用于加载库DLL,然后调用库DLL中的函数。 函数名称在命令行中指定,参数也在实用程序命令行中提供。 我可以使用LoadLibrary()函数从动态加载的DLL访问外部函数。 加载库后,我可以使用GetProcAddress()获取指向函数的指针。我想用命令行中指定的参数调用函数。 我可以将void-pointer-list传递给我从LoadLibrary()函数返回的函数指针,类似于下面的示例? 为了简化示例代码,我删除了错误检查。 有没有办法让这样的工作: //在另一个dll的某个地方 int DoStuff(int a,int b) { 返回a + b; } int main(int argc,char ** argv) { void * retval; void * list = argv [3]; HMODULE dll; void *(* generic_function)(void *); dll = LoadLibraryA(argv [1]); // argv [2] =“DoStuff” generic_function = GetProcAddress(dll,argv [2]); // argv [3] = 4,argv […]

将指针重置为文件的开头

我怎样才能重置指向命令行输入或文件开头的指针。 例如,我的函数是从文件中读取一行并使用getchar()将其打印出来 while((c=getchar())!=EOF) { key[i++]=c; if(c == ‘\n’ ) { key[i-1] = ‘\0’ printf(“%s”,key); } } 运行之后,指针指向EOF im假设? 如何让它再次指向文件的开头/甚至重新读取输入文件 即我输入(./function <inputs.txt)

在C中访问指针地址的struct成员

我正在读这本书 ,我在第14章中找到了这段代码片段。 struct kobject *cdev_get(struct cdev *p) { struct module *owner = p->owner; struct kobject *kobj; if (owner && !try_module_get(owner)) return NULL; kobj = kobject_get(&p->kobj); if (!kobj) module_put(owner); return kobj; } 我理解这个取消引用p,然后一个cdev指针访问它的所有者成员 p->owner // (*p).owner 但是,这是如何工作的? 它似乎取消引用cdev指针的内存地址然后访问指针本身的kobj成员? &p->kobj // (*(&p)).kobj 我认为指针不仅仅是内存地址,所以我不明白他们如何拥有成员。 如果它试图访问指针本身的成员,为什么不只是做p.kobj ?

C指针和内存分配:Realloc数组和指针传递

对于那些有C经验的人来说,这将是一个简单的内存分配/引用问题: 这是我的数据结构: struct configsection { char *name; unsigned int numopts; configoption *options; }; typedef struct configsection configsection; struct configfile { unsigned int numsections; configsection *sections; }; typedef struct configfile configfile; 以下是初始化configsection或configfile以及将配置文件添加到配置文件的例程: // Initialize a configfile structure (0 sections) void init_file(configfile *cf) { cf = malloc(sizeof(configfile)); cf->numsections = 0; } // Initialize a configsection structure with […]